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

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

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

Студворк — интернет-сервис помощи студентам
Что происхот при:
C++
1
2
    int* p = NULL;
    cout << *p;
Другими словами, на что ссылается нулевой указатель? Компилятор ошибок не выдает.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.01.2012, 05:26
Ответы с готовыми решениями:

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

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

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

12
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
09.01.2012, 05:28
ни на что не ссылается. поведение при разыменовывании нулевого указателя неопределено. в рантайме скорее всего покрашится все.
1
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
09.01.2012, 05:50  [ТС]
То есть зависит от того, что решит компилятор делать с этим чудом?
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
09.01.2012, 05:55
Цитата Сообщение от Tamoren Посмотреть сообщение
То есть зависит от того, что решит компилятор делать с этим чудом?
Компилятор только компилирует, т.е. создает программу. Программа запускается без компилятора.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
09.01.2012, 05:55
Цитата Сообщение от 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;
}
Code
1
2
3
4
~/cpp/other $ g++ -o nullpointerexception nullpointerexception.cpp 
~/cpp/other $ ./nullpointerexception 
Bus error
~/cpp/other $
2
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
09.01.2012, 06:05  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
Опять же - а дописать, скомпилировать
Дописал, скомпилировал - без предупреждений и ошибок. Запускать не решился Я же не знаю произойдет после запуска.
А почему же все-таки этот код компилируется?

Цитата Сообщение от Chelioss Посмотреть сообщение
Компилятор только компилирует, т.е. создает программу.
Ну так я только и скомпилировал, а неопределенность, как я понимаю, означает, что на разных платформах может быть по разному.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
09.01.2012, 06:18
Цитата Сообщение от Tamoren Посмотреть сообщение
Запускать не решился
Не, ну комп взорваться не должен...

Цитата Сообщение от Tamoren Посмотреть сообщение
а неопределенность, как я понимаю, означает, что на разных платформах может быть по разному
Можно и так сказать. Несколько удивило поведение в dosbox
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
09.01.2012, 06:25
Цитата Сообщение от easybudda Посмотреть сообщение
Несколько удивило поведение в dosbox
Чем дальше в лес, тем толще партизаны
0
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
09.01.2012, 07:00  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
Несколько удивило поведение в dosbox
Эээ это у него указатель на 0 равен нулю?

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

NPE.EXE это скомпилированный NPE.CPP, тот что на экране? По идее (ну раз в 1 случае - 0) должен был 1 написать. Wtf?!
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
09.01.2012, 08:19
Цитата Сообщение от Tamoren Посмотреть сообщение
Другими словами, на что ссылается нулевой указатель? Компилятор ошибок не выдает.
Комилятор не среагирует при любом значении, так как вообще не его дело заниматься значениями. Строка
C++
1
cout<<*p;
компилится отдельно ото всего остального, кроме декларации одного лишь типа величины p, то есть кроме
C++
1
int* p;
, игнорируя инициализацию, а будучи вырванной из контекста, ошибок не содержит. Ошибка может быть только в рантайме, так что запусти и любуйся красивым глюком.
1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
09.01.2012, 11:06
Цитата Сообщение от Tamoren Посмотреть сообщение
Что происхот при:
В стандарте этот момент не оговорен. Это Undefined behavior. Разыменование нулевых указателей, которые равны NULL, может дать 0, или любое произвольное значение, или остановку программы, или сигнал какого-либо вида, или исключение. Или все вместе. Или что-то еще.

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

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

Добавлено через 55 секунд
Правда второй пример это не объясняет... Разве что эта область памяти защищена для записи (т.е. читать можно, а писать - нет)
1
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
09.01.2012, 16:10  [ТС]
Да, спасибо. Это я уже примерно понял.

Только врубиться не могу, как такое в DOSBox'е получилось?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.01.2012, 16:10
Помогаю со студенческими работами здесь

Почему возвращается нулевой указатель?
Всем привет. Не могу понять из за чего внутри метода указатель корректно присваивается, видно что он указывает на объект. Но потом при...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru