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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.69
Tamoren
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
#1

Нулевой указатель - C++

09.01.2012, 05:26. Просмотров 4960. Ответов 12
Метки нет (Все метки)

Что происхот при:
C++
1
2
    int* p = NULL;
    cout << *p;
Другими словами, на что ссылается нулевой указатель? Компилятор ошибок не выдает.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2012, 05:26     Нулевой указатель
Посмотрите здесь:

Нулевой указатель - C++
Всем привет. Возникли вот такие вопросы: Допустим, есть код: char *a = new char(5); В каких пределах будет находиться a? Т.е....

Нулевой указатель на объект - C++
Здравствуйте. #include &lt;iostream&gt; using std::cout; using std::endl; class A { public: A() {} int Foo() { return 56;...

Нулевой указатель на функцию - C++
Всем привет. Ещё раз подыму предыдущую тему. Я делаю упражнение на явное связывание dll. Проблема состоит вот в чем. Я кладу библиотеку в...

Как проверить нулевой ли указатель? - C++
Как проверить нулевой ли указатель? Почему-то всегда думал что так: if (pointer) Но не работает Заранее спасибо!

Как работает нулевой указатель? - C++
Как загнать нулевой указатель на Пробовал вот так, например: {... char *REZ=STR(str2, str1); *REZ!=NULL ? printf(&quot;\n%c&quot;, *REZ) :...

Как работает нулевой указатель null - C++
int x = NULL; указывает на то, что память на переменную x выделилась, но она ни на что не указывает(не имеет значения)?

Заставить указатель указывать на нулевой элемент массива - C++
Вроде бы и простой вопрос для начинающих, но почему-то не могу найти на него ответ. Есть функция сортировки массива, алгоритм типа...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
09.01.2012, 05:28     Нулевой указатель #2
ни на что не ссылается. поведение при разыменовывании нулевого указателя неопределено. в рантайме скорее всего покрашится все.
Tamoren
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
09.01.2012, 05:50  [ТС]     Нулевой указатель #3
То есть зависит от того, что решит компилятор делать с этим чудом?
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
09.01.2012, 05:55     Нулевой указатель #4
Цитата Сообщение от Tamoren Посмотреть сообщение
То есть зависит от того, что решит компилятор делать с этим чудом?
Компилятор только компилирует, т.е. создает программу. Программа запускается без компилятора.
easybudda
Эксперт CЭксперт С++
9466 / 5479 / 927
Регистрация: 25.07.2009
Сообщений: 10,503
09.01.2012, 05:55     Нулевой указатель #5
Цитата Сообщение от Tamoren Посмотреть сообщение
То есть зависит от того, что решит компилятор делать с этим чудом?
Компилятор ничего не решит, в лучшем случае предупреждение выдаст. А вот при выполнении программа грохнется с null pointer exception, о чём уже выше сказали. Опять же - а дописать, скомпилировать, запустить и посмотреть, что будет - не?
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
 
int main(){
    int * p = NULL;
    cout << *p;
     
    return 0;
}
Код
~/cpp/other $ g++ -o nullpointerexception nullpointerexception.cpp 
~/cpp/other $ ./nullpointerexception 
Bus error
~/cpp/other $
Tamoren
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
09.01.2012, 06:05  [ТС]     Нулевой указатель #6
Цитата Сообщение от easybudda Посмотреть сообщение
Опять же - а дописать, скомпилировать
Дописал, скомпилировал - без предупреждений и ошибок. Запускать не решился Я же не знаю произойдет после запуска.
А почему же все-таки этот код компилируется?

Цитата Сообщение от Chelioss Посмотреть сообщение
Компилятор только компилирует, т.е. создает программу.
Ну так я только и скомпилировал, а неопределенность, как я понимаю, означает, что на разных платформах может быть по разному.
easybudda
Эксперт CЭксперт С++
9466 / 5479 / 927
Регистрация: 25.07.2009
Сообщений: 10,503
09.01.2012, 06:18     Нулевой указатель #7
Цитата Сообщение от Tamoren Посмотреть сообщение
Запускать не решился
Не, ну комп взорваться не должен...

Цитата Сообщение от Tamoren Посмотреть сообщение
а неопределенность, как я понимаю, означает, что на разных платформах может быть по разному
Можно и так сказать. Несколько удивило поведение в dosbox
Нулевой указатель
easybudda
Эксперт CЭксперт С++
9466 / 5479 / 927
Регистрация: 25.07.2009
Сообщений: 10,503
09.01.2012, 06:25     Нулевой указатель #8
Цитата Сообщение от easybudda Посмотреть сообщение
Несколько удивило поведение в dosbox
Чем дальше в лес, тем толще партизаны
Нулевой указатель
Tamoren
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
09.01.2012, 07:00  [ТС]     Нулевой указатель #9
Цитата Сообщение от easybudda Посмотреть сообщение
Несколько удивило поведение в dosbox
Эээ это у него указатель на 0 равен нулю?

Цитата Сообщение от easybudda Посмотреть сообщение
Чем дальше в лес, тем толще партизаны

NPE.EXE это скомпилированный NPE.CPP, тот что на экране? По идее (ну раз в 1 случае - 0) должен был 1 написать. Wtf?!
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
09.01.2012, 08:19     Нулевой указатель #10
Цитата Сообщение от Tamoren Посмотреть сообщение
Другими словами, на что ссылается нулевой указатель? Компилятор ошибок не выдает.
Комилятор не среагирует при любом значении, так как вообще не его дело заниматься значениями. Строка
C++
1
cout<<*p;
компилится отдельно ото всего остального, кроме декларации одного лишь типа величины p, то есть кроме
C++
1
int* p;
, игнорируя инициализацию, а будучи вырванной из контекста, ошибок не содержит. Ошибка может быть только в рантайме, так что запусти и любуйся красивым глюком.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
09.01.2012, 11:06     Нулевой указатель #11
Цитата Сообщение от Tamoren Посмотреть сообщение
Что происхот при:
В стандарте этот момент не оговорен. Это Undefined behavior. Разыменование нулевых указателей, которые равны NULL, может дать 0, или любое произвольное значение, или остановку программы, или сигнал какого-либо вида, или исключение. Или все вместе. Или что-то еще.

Добавлено через 50 минут
Цитата Сообщение от Tamoren Посмотреть сообщение
Эээ это у него указатель на 0 равен нулю?
И такое возможно
Evg
Эксперт CАвтор FAQ
17545 / 5783 / 370
Регистрация: 30.03.2009
Сообщений: 15,928
Записей в блоге: 26
09.01.2012, 12:11     Нулевой указатель #12
Цитата Сообщение от easybudda Посмотреть сообщение
Несколько удивило поведение в dosbox
В dos'е используется real-mode, в котором нету современных настроек страничной памяти. Т.е. вся память в пределах 1 мегабайта является валидной.

Добавлено через 58 секунд
Не в dos'е, а в dos'овских компиляторах. По умолчанию генерируется код под real-mode.

Добавлено через 55 секунд
Правда второй пример это не объясняет... Разве что эта область памяти защищена для записи (т.е. читать можно, а писать - нет)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2012, 16:10     Нулевой указатель
Еще ссылки по теме:

Функция fopen возвращает нулевой указатель (Visual Studio) - C++
Здраствуйте) У меня возникла очень странная проблема.просто мистика. С чем может быть связано возвращение нулевого указателя в...

Указатель на указатель и Нарушение прав доступа - C++
функция, добавляющая новый элемент в динамический массив из указателей При вызове : pData=Add(NULL,1,question); Работает исправно,...

указатель на указатель или присваивание объекта - C++
Доброе утро. Вот я в своем классе создал параметр class TTo4ka { ... TGrup **MyGrup; ... };

Зачем использовать Указатель на указатель? - C++
Подскажите зачем использовать Указатель на указатель? И как работают двумерные массивы за счет указателей?

Указатель на указатель внутри структуры - C++
Приветствую. Есть 2 структуры: enum category { Technical, History, Fiction }; struct BOOK { char author; char name; int...


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

Или воспользуйтесь поиском по форуму:
Tamoren
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
09.01.2012, 16:10  [ТС]     Нулевой указатель #13
Да, спасибо. Это я уже примерно понял.

Только врубиться не могу, как такое в DOSBox'е получилось?
Yandex
Объявления
09.01.2012, 16:10     Нулевой указатель
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru