ForEveR
В астрале
![]() |
||||||
#1 | ||||||
Разыменование нулевого указателя - C++28.04.2011, 23:54. Просмотров 2837. Ответов 3
Метки нет Все метки)
(
Как вообще по стандарту ведет себя программа после разыменования нулевого указателя? Указано-ли это явно?
Просто сегодня на работе обнаружил код вроде
Но не суть. Скомпилив на MSVS получил ошибку, что логично. Скомпилировав на gcc получил корректность! result Как такое может быть вообще? ЗЫ как следствие такой код ведет себя на gcc тоже прекрасно, а на msvs бросает ошибку simple code. Растолкуйте кто знает?
0
|
|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
|
28.04.2011, 23:54 |
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Разыменование нулевого указателя (C++):
3
Разыменование указателя! - C++
Разыменование указателя в структуре - C++
помогите отличить разыменование от указателя - C++ |
prazuber
110 / 110 / 3
Регистрация: 29.04.2010
Сообщений: 240
|
|
28.04.2011, 23:59 | #2 |
Undefined behavior? Стандарт не читал, но в MSDN написано именно так.
1
|
ForEveR
В астрале
![]() |
|
29.04.2011, 00:27 [ТС] | #3 |
PraZuBeR, Похоже да.
В комментариях Добавлено через 27 минут Собственно полазил по стандарту. Пункт 1.9.4
0
|
Evg
![]() ![]() |
||||||
29.04.2011, 12:17 | #4 | |||||
![]()
А покажи, что заошибку выдаёт MSVS? Я что-то в этом коде не заметил, что ошибку должно давать
Добавлено через 3 минуты А... тьфу ты, *context Смысл того, что в gcc нет ошибки - из-за того, что нет реального использования значение *context. На том сайте, котором ты смотришь, gcc запускается с оптимизациями, а потому он неиспользуемое выражение попросту удалил. В MSVS при включении оптимизаций скорее всего будет то же самое Добавлено через 2 минуты Вот короткий пример:
Код
$ gcc t.c $ ./a.out Segmentation fault $ gcc t.c -O2 $ ./a.out <ok>
1
|
29.04.2011, 12:17 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
29.04.2011, 12:17 |
Привет! Вот еще темы с ответами:
4
Разыменование указателя, не передается правильное значение - C++ Произведение двух матриц через разыменование указателя - C++ Обнаружением нулевого указателя - C++
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |