Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255

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

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

Студворк — интернет-сервис помощи студентам
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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.07.2010, 22:19
Ответы с готовыми решениями:

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

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

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

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


Цитата Сообщение от M128K145 Посмотреть сообщение
if(f == NULL)
а чем это в принципе от
C++
1
if ( ! f )
отличается?
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
23.07.2010, 00:32
easybudda, не знаю, может IDE какая-то экзотическая, которая не может нормальным образом обработать. Факт в том, что ошибка пропала, но не факт, что после этого изменения
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
23.07.2010, 12:16  [ТС]
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
Где вы создали файл?
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
23.07.2010, 12:33  [ТС]
Цитата Сообщение от 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
Дак это, шестая строка:

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

C++
1
 if (f==NULL) {}
Вы посмотрите предыдущие посты и мой последний ответ перед Вашим первым постом.
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
23.07.2010, 13:02
alexsvk, перечитайте внимательно пост Ошибка обращения к нулевому адресу
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
23.07.2010, 13:15  [ТС]
Цитата Сообщение от M128K145 Посмотреть сообщение
alexsvk, перечитайте внимательно пост Ошибка обращения к нулевому адресу
Указатель на следующей команде (не совсем понял), но у easybudda после исправления на .txt всё запустилось, у меня до сих пор ошибка.
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
23.07.2010, 13:31
Вот код
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  [ТС]
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
 Аватар для FireNovel
150 / 73 / 27
Регистрация: 09.04.2010
Сообщений: 297
23.07.2010, 14:37
Цитата Сообщение от alexsvk Посмотреть сообщение
объясните, пожалуйста, при каких обстоятельствах происходит пропуск инструкций
Каких, именно инструкций?
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
23.07.2010, 14:56
Цитата Сообщение от easybudda Посмотреть сообщение
Цитата Сообщение от M128K145 Посмотреть сообщение
C++
1
if(f == NULL)
а чем это в принципе от
C++
1
if ( ! f )
отличается?
В первом случае вызывается оператор:
C++
1
operator void*
а во втором
C++
1
operator!
Судя по описанию делают они одно и тоже, поэтому принципиально они идентичны.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.07.2010, 14:56
Помогаю со студенческими работами здесь

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

Ошибка «Инструкция по адресу 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"
При каждом запуске игры появляется всплывающее окно - Ошибка приложения : Инструкция по адресу &quot;0x00bcdde6&quot; обратилась к памяти...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 31.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru