9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
1

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

22.07.2010, 22:19. Показов 3192. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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."
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.07.2010, 22:19
Ответы с готовыми решениями:

Почему код корректро отрабатывает после обращения по разыменованному нулевому указателю?
Добрый вечер, проходил тест по плюсам и столкнулся со следующим кодом. Объясните, пожалуйста,...

Ошибка обращения к нулевому адресу
Есть программа, которая при запуске обращается к фтп серверу, считывает с него несколько файлов и...

Цикл с изменой обращения к адресу
Доброго времени суток, как сделать цикл с помощью кода гипотетической ЭВМ, Не могу понять как...

Конкурент переводит обращения по его адресу на нас
Был некий конфликт с человеком и теперь он ведет нечестную игру, в общем вопроса у меня два, начне...

21
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
22.07.2010, 22:35 2
alexsvk, что за IDE? попробуйте написать явно
C++
1
if(f != NULL)
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
22.07.2010, 22:38  [ТС] 3
Цитата Сообщение от M128K145 Посмотреть сообщение
alexsvk, что за IDE? попробуйте написать явно
C++
1
if(f != NULL)
Хм, программа показала ошибку открытия файла.
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
22.07.2010, 22:47 4
alexsvk, значит файл недоступен(имя написано с ошибками, находится не в этом каталоге)
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
22.07.2010, 22:54  [ТС] 5
Цитата Сообщение от M128K145 Посмотреть сообщение
alexsvk, значит файл недоступен(имя написано с ошибками, находится не в этом каталоге)
я просто скопировал это имя и создал файл в папке этой программы
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
22.07.2010, 23:27 6
Цитата Сообщение от alexsvk Посмотреть сообщение
int mas [25]
Цитата Сообщение от alexsvk Посмотреть сообщение
for (i = 0; i < 26; i++)
ничего странного не замечаете?
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
22.07.2010, 23:55 7
easybudda, это будет потом, когда хоть поток создастся
Хотя я немного ошибся и надо написать так
C++
1
if(f == NULL)
Такой себе тест для ТС на понимание действий, с которым он не справился
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
23.07.2010, 00:06 8
поправил строку
C++
1
int mas [26], i;
и к имени файла .txt добавил (ну и файл соответственно создал - alphacntr.txt). Скомпилировалось и запустилось. Ошибок не выдало никаких, правда, вывело бред какой-то.
А ругалось так, как ругалось потому, что в момент, когда ошибка выдавалась, указатель на следующей команде стоял...
Ошибка обращения к нулевому адресу


Цитата Сообщение от M128K145 Посмотреть сообщение
if(f == NULL)
а чем это в принципе от
C++
1
if ( ! f )
отличается?
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
23.07.2010, 00:32 9
easybudda, не знаю, может IDE какая-то экзотическая, которая не может нормальным образом обработать. Факт в том, что ошибка пропала, но не факт, что после этого изменения
0
9 / 9 / 0
Регистрация: 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.
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
23.07.2010, 12:25 11
Где вы создали файл?
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
23.07.2010, 12:33  [ТС] 12
Цитата Сообщение от neske Посмотреть сообщение
Где вы создали файл?
C:\Program Files\Microsoft Visual Studio\MyProjects\Ch9_finish_4
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
23.07.2010, 12:43 13
Дак это, шестая строка:

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

C++
1
 if (f==NULL) {}
Вы посмотрите предыдущие посты и мой последний ответ перед Вашим первым постом.
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
23.07.2010, 13:02 15
alexsvk, перечитайте внимательно пост Ошибка обращения к нулевому адресу
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
23.07.2010, 13:15  [ТС] 16
Цитата Сообщение от M128K145 Посмотреть сообщение
alexsvk, перечитайте внимательно пост Ошибка обращения к нулевому адресу
Указатель на следующей команде (не совсем понял), но у easybudda после исправления на .txt всё запустилось, у меня до сих пор ошибка.
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
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;
}
0
9 / 9 / 0
Регистрация: 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;
    }
0
150 / 73 / 27
Регистрация: 09.04.2010
Сообщений: 297
23.07.2010, 14:37 19
Цитата Сообщение от alexsvk Посмотреть сообщение
объясните, пожалуйста, при каких обстоятельствах происходит пропуск инструкций
Каких, именно инструкций?
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 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!
Судя по описанию делают они одно и тоже, поэтому принципиально они идентичны.
0
23.07.2010, 14:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2010, 14:56
Помогаю со студенческими работами здесь

Ошибка «Инструкция по адресу 0х0093bd32 обратилась к памяти по адресу 0х00000000.Память не может быть «read»
Недавно установили 2ой Windows на диск D, старый остался на C. На первом Windows программа iTunes...

Ошибка: инструкция по адресу 0x00aeb5e2 обратилась к памяти по адресу 0x00000008.память не может быть read
инструкция по адресу 0x00aeb5e2 обратилась к памяти по адресу 0x00000008.память не может быть read...

Ошибка при запуске CS:GO "Инструкция по адресу 0x0db783c1 обратилась по адресу 0x00000000"
Ошибка при запуске CS:GO инструкция по адресу 0x0db783c1 обратилась по адресу 0x00000000

Ошибка приложения : Инструкция по адресу "0x00bcdde6" обратилась к памяти по адресу "0x00000000"
При каждом запуске игры появляется всплывающее окно - Ошибка приложения : Инструкция по адресу...

Ошибка приложения : Инструкция по адресу "0x77e76eb6" обратилась к памяти по адресу "0x00000001"
Цитата из Просмотр событий - Всплывающее окно приложения: Fscreen: ATKKBService.exe - Ошибка...

Ошибка приложения: инструкция по адресу "0х770301b8" обратилась к памяти по адресу "0х00000050"
здрасьте,комп постоянно выдает AvastUI.exe-Ошибка приложения ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru