Странное исключение явление в Windows 7 - PullRequest
0 голосов
/ 17 июня 2010

Я замечаю некоторые интересные статьи о дескрипторе исключений в CodeProject

http://www.codeproject.com/KB/cpp/seexception.aspx

После прочтения я решил провести некоторый эксперимент.

При первой попытке выполнить следующий код

char *p;
p[0] = 0;

Программа умерла без вопросов.

Но

Через несколько раз, когда я выполнил ту же проблему, двоичный код, это волшебным образом хорошо.

Даже следующий код работает хорошо. Любая подсказка или объяснение?

char *p;
p[1000] = 'd';
cout<<p[1000]<<endl;

Моя операционная система - 64-битная Windows 7, компилятор - VS2008 rc1.

1 Ответ

1 голос
/ 17 июня 2010

Разыменование указателя, который не указывает на объект (например, неинициализированный указатель), приводит к неопределенному поведению.

Это означает, что все может случиться. Как правило, запись через неинициализированный указатель приведет к сбою вашей программы - либо сразу, либо в какой-то момент в будущем. Вполне возможно, что ваша программа может продолжать работать правильно, но вы никогда не можете полагаться на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...