Форум программистов, компьютерный форум CyberForum.ru

Ошибка обращения к нулевому адресу - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
22.07.2010, 22:19     Ошибка обращения к нулевому адресу #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
int main(int argc, char* argv[])
{
    ifstream f ("alphacntr",ios::in|ios::binary);
    
 
    if (!f)
    {
        cout<<"File opening error!\n";
        return 1;
    }
 
    int mas [25], i;
    char ch;
 
    for (i = 0; i < 26; i++)
        mas [i] = 0;
 
    while (!f.eof())
    {
        ch = f.get();
 
        if (isalpha(ch))
        {
            if (!islower(ch))
                toupper(ch);
 
            mas [ch - 'A']++;
        }
    }
 
    for (i = 0; i < 26; i++)
    {
        cout<<(char)mas[i + 'A']<<' ';
    }
 
    cout<<endl;
 
    for (i = 0; i < 26; i++)
    {
        cout<<mas[i];
    }
 
    cout<<endl;
 
    return 0;
}
while (!f.eof()) - на этой строчке выдаёт "Unhandled exception in ....exe: 0x0000005: Access Violation."
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2010, 22:19     Ошибка обращения к нулевому адресу
Посмотрите здесь:

C++ Необработанное исключение по адресу 0x00105FD7 в Динамические структуры: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCDCDCE09
C++ Исправить ошибку: необработанное исключение по адресу, нарушение прав доступа при записи по адресу
Конвертор из wchar_t to string. Ошибка косвенного обращения. C++
C++ Ошибка в уровнях косвенного обращения
Необработанное исключение по адресу, нарушение прав доступа при записи по адресу C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
22.07.2010, 22:35     Ошибка обращения к нулевому адресу #2
alexsvk, что за IDE? попробуйте написать явно
C++
1
if(f != NULL)
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
22.07.2010, 22:38  [ТС]     Ошибка обращения к нулевому адресу #3
Цитата Сообщение от M128K145 Посмотреть сообщение
alexsvk, что за IDE? попробуйте написать явно
C++
1
if(f != NULL)
Хм, программа показала ошибку открытия файла.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
22.07.2010, 22:47     Ошибка обращения к нулевому адресу #4
alexsvk, значит файл недоступен(имя написано с ошибками, находится не в этом каталоге)
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
22.07.2010, 22:54  [ТС]     Ошибка обращения к нулевому адресу #5
Цитата Сообщение от M128K145 Посмотреть сообщение
alexsvk, значит файл недоступен(имя написано с ошибками, находится не в этом каталоге)
я просто скопировал это имя и создал файл в папке этой программы
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
22.07.2010, 23:27     Ошибка обращения к нулевому адресу #6
Цитата Сообщение от alexsvk Посмотреть сообщение
int mas [25]
Цитата Сообщение от alexsvk Посмотреть сообщение
for (i = 0; i < 26; i++)
ничего странного не замечаете?
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
22.07.2010, 23:55     Ошибка обращения к нулевому адресу #7
easybudda, это будет потом, когда хоть поток создастся
Хотя я немного ошибся и надо написать так
C++
1
if(f == NULL)
Такой себе тест для ТС на понимание действий, с которым он не справился
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.07.2010, 00:06     Ошибка обращения к нулевому адресу #8
поправил строку
C++
1
int mas [26], i;
и к имени файла .txt добавил (ну и файл соответственно создал - alphacntr.txt). Скомпилировалось и запустилось. Ошибок не выдало никаких, правда, вывело бред какой-то.
А ругалось так, как ругалось потому, что в момент, когда ошибка выдавалась, указатель на следующей команде стоял...
Ошибка обращения к нулевому адресу

Цитата Сообщение от M128K145 Посмотреть сообщение
if(f == NULL)
а чем это в принципе от
C++
1
if ( ! f )
отличается?
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
23.07.2010, 00:32     Ошибка обращения к нулевому адресу #9
easybudda, не знаю, может IDE какая-то экзотическая, которая не может нормальным образом обработать. Факт в том, что ошибка пропала, но не факт, что после этого изменения
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
23.07.2010, 12:16  [ТС]     Ошибка обращения к нулевому адресу #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
int main(int argc, char* argv[])
{
    ifstream f ("alphacntr.txt",ios::in|ios::binary);
    
 
    if (f != NULL)
    {
        cout<<"File opening error!\n";
        return 1;
    }
 
    int mas [25], i;
    char ch;
 
    for (i = 0; i < 25; i++)
        mas [i] = 0;
 
    while (!f.eof())
    {
        ch = f.get();
 
        if (!f.good() && f.eof()) return 1;
 
        if (isalpha(ch))
        {
            if (!islower(ch))
                toupper(ch);
 
            mas [ch - 'A']++;
        }
    }
 
    for (i = 0; i < 25; i++)
    {
        cout<<(char)mas[i + 'A']<<' ';
    }
 
    cout<<endl;
 
    for (i = 0; i < 25; i++)
    {
        cout<<mas[i];
    }
 
    cout<<endl;
 
    f.close();
 
    if (!f.good()) return 1;
 
    return 0;
}
Вот исправленный код.
easybudda, создал файл alphacntr.txt, и файл соответствующий, конечно. При запуске выдаёт ошибку открытия файла, то есть f = NULL.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
23.07.2010, 12:25     Ошибка обращения к нулевому адресу #11
Где вы создали файл?
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
23.07.2010, 12:33  [ТС]     Ошибка обращения к нулевому адресу #12
Цитата Сообщение от neske Посмотреть сообщение
Где вы создали файл?
C:\Program Files\Microsoft Visual Studio\MyProjects\Ch9_finish_4
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
23.07.2010, 12:43     Ошибка обращения к нулевому адресу #13
Дак это, шестая строка:

C++
1
 if (f==NULL) {}
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
23.07.2010, 12:44  [ТС]     Ошибка обращения к нулевому адресу #14
Цитата Сообщение от neske Посмотреть сообщение
Дак это, шестая строка:

C++
1
 if (f==NULL) {}
Вы посмотрите предыдущие посты и мой последний ответ перед Вашим первым постом.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
23.07.2010, 13:02     Ошибка обращения к нулевому адресу #15
alexsvk, перечитайте внимательно пост Ошибка обращения к нулевому адресу
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
23.07.2010, 13:15  [ТС]     Ошибка обращения к нулевому адресу #16
Цитата Сообщение от M128K145 Посмотреть сообщение
alexsvk, перечитайте внимательно пост Ошибка обращения к нулевому адресу
Указатель на следующей команде (не совсем понял), но у easybudda после исправления на .txt всё запустилось, у меня до сих пор ошибка.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
23.07.2010, 13:31     Ошибка обращения к нулевому адресу #17
Вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
int main(int argc, char* argv[])
{
        ifstream f ("alphacntr.txt",ios::in|ios::binary);
        
 
        if (f == NULL)
        {
                cout<<"File opening error!\n";
                return 1;
        }
 
        int mas [25], i;
        char ch;
 
        for (i = 0; i < 25; i++)
                mas [i] = 0;
 
        while (!f.eof())
        {
                ch = f.get();
                if (!f.good() && f.eof()) return 1;
 
                if (isalpha(ch))
                {
                        if (!islower(ch))
                                toupper(ch);
                        mas [ch - 'A']++;
                }
        }
        for (i = 0; i < 25; i++)
        {
                cout<<(char)mas[i + 'A']<<' ';
        }
        cout<<endl;
        for (i = 0; i < 25; i++)
        {
                cout<<mas[i];
        }
        cout<<endl;
        f.close();
        if (!f.good()) return 1;
 
        return 0;
}
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
23.07.2010, 14:03  [ТС]     Ошибка обращения к нулевому адресу #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
int main(int argc, char* argv[])
{
    fstream f ("alphacntr.txt",ios::out|ios::binary);
 
    char str [255];
 
    if (!f)
    {
        cout<<"File opening error!\n";
        return 1;
    }
 
    cout<<"Enter the string: ";
    cin.getline(str, 254);
 
    f.write(str, strlen(str));
 
    f.close();
 
    f.open("alphacntr.txt",ios::in|ios::binary);
 
    int mas [25], i;
    char ch;
 
    for (i = 0; i < 25; i++)
        mas [i] = 0;
 
    while (!f.eof())
    {
        ch = f.get();
 
        if (!f.good() && f.eof()) return 1;
 
        if (isalpha(ch))
        {
            if (islower(ch))
                toupper(ch);
 
            mas [ch - 'A']++;
        }
    }
 
    for (i = 0; i < 25; i++)
    {
        cout<<(char)mas[i + 'A']<<": "<<mas[i]<<endl;
    }
 
    cout<<endl;
 
    f.close();
 
    if (!f.good()) return 1;
 
    return 0;
}
Переделал код, но вопрос следующий, объясните, пожалуйста, при каких обстоятельствах происходит пропуск инструкций
C++
1
2
3
4
for (i = 0; i < 25; i++)
    {
        cout<<(char)mas[i + 'A']<<": "<<mas[i]<<endl;
    }
FireNovel
 Аватар для FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
23.07.2010, 14:37     Ошибка обращения к нулевому адресу #19
Цитата Сообщение от alexsvk Посмотреть сообщение
объясните, пожалуйста, при каких обстоятельствах происходит пропуск инструкций
Каких, именно инструкций?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2010, 14:56     Ошибка обращения к нулевому адресу
Еще ссылки по теме:

Ошибка доступа по адресу 0x00000000 C++
C++ Ошибка: нарушение прав доступа по адресу
Ошибка: необработанное исключение по адресу C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
23.07.2010, 14:56     Ошибка обращения к нулевому адресу #20
Цитата Сообщение от easybudda Посмотреть сообщение
Цитата Сообщение от M128K145 Посмотреть сообщение
C++
1
if(f == NULL)
а чем это в принципе от
C++
1
if ( ! f )
отличается?
В первом случае вызывается оператор:
C++
1
operator void*
а во втором
C++
1
operator!
Судя по описанию делают они одно и тоже, поэтому принципиально они идентичны.
Yandex
Объявления
23.07.2010, 14:56     Ошибка обращения к нулевому адресу
Ответ Создать тему
Опции темы

Текущее время: 20:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru