Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ошибка Unhandled exception at...

23K
13 февраля 2009 года
Inc(Dec(i))
61 / / 13.02.2009
Помогите плз, никак не могу понять почему появляется сообщение об ошибке при выполнении проекта:

Unhandled exception at 0x10296af2 (msvcr90d.dll) in lab2.exe: 0xC0000005: Access violation writing location 0x00000000.

Причем билд проходит нормально без ошибок, экзешник собирается, но во время исполнения такая фигня.
Ниже код:
Код:
#include "stdafx.h"
#include <conio.h> //_getch()
#define NMAX 100

class simpleNumbers
{

private:

    int m;
    int table[NMAX];

public:

    //заполнение таблицы
    void setTable()
    {
        int i = 2;
        int k = 1;
        table[0] = 1;
        while (i < m+1)
        {
            if (i % 2 != 0)
            {
                int j = 0;
                while (j < k+1)
                {
                    if ((table[j] == 0) || ((i % table[j] == 0) && (j != 0)))
                        break;
                    j++;
                }
                if (j == k)
                {
                    table[k] = i;
                    k++;
                }
            }
            i++;
        }
    }

    //Просмотр таблицы
    void getTable()
    {
        int i = 0;
        while (table != 0 )
        {
            printf("%d \n",table);
            i++;
        }
    }

    //Ввод числа М
    void setM()
    {
        printf("Please enter M: ");
        while (!scanf("%d",m))
        {
            printf("Error! Value is incorrect!\n");
            scanf("%d",m);
        }
    }

    //Конструктор класса
    simpleNumbers()
    {
        m = 0;
        for (int i = 0; i < NMAX; i++)
            table = 0;
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    simpleNumbers sNumber;
    sNumber.setM();
    sNumber.setTable();
    sNumber.getTable();
    return 0;
}
11
13 февраля 2009 года
oxotnik333
2.9K / / 03.08.2007
выход за границы массива и здраствуй попа, новый год, особенно вот здесь:
 
Код:
while (table != 0 )
{
    printf("%d \n",table);
    i++;
}

таким макаром можно и до нескольких тысяч досчитать,
если раньше AV не вывалится
23K
13 февраля 2009 года
Inc(Dec(i))
61 / / 13.02.2009
сомневаюсь что ошибка из-за выхода за границы массива. потому, что в таблице есть 0, и цикл не должен зацикливаться, к томуже я трейсил, ошибка вылазиет на первой же итерации. и еще: абсолютно идентичный код, но оформленный в виде 3-х процедур, а не класса работает.
11
13 февраля 2009 года
oxotnik333
2.9K / / 03.08.2007
в какой строке вываливается?
23K
13 февраля 2009 года
Inc(Dec(i))
61 / / 13.02.2009
while (!scanf("%d",m)) в методе setM
255
13 февраля 2009 года
Dart Bobr
1.4K / / 09.04.2004
А вы, уважаемый, хоть бы потрудились почитать мсдн на предмет функции scanf, разобрать пример, который там есть. Тогда бы у вас не возникало вопросов.
Как минимум нужно передавать ссылку на переменную. И зачем вам цикл, я в упор не пойму.
23K
14 февраля 2009 года
Inc(Dec(i))
61 / / 13.02.2009
Насчет ссылки спасибо. Теперь работает. А цикл что бы вроде как не отставать от пользователя пока тот корректное значение не введет, но как оказалось теперь, задумка не работает(((
255
15 февраля 2009 года
Dart Bobr
1.4K / / 09.04.2004
Ну, тут я вам могу только посоветовать почитать немного про архитектуру компьютера. Как минимум - читать о том как работают северный/южный мосты и контроллер клавиатуры.
Да поможет вам гугл и да снизойдет на вас просветление :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог