Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Если компиляция в режиме выпуска включает определение NDEBUG, то да.
Видят , утверждают (CRT)
Утверждать макрос (по крайней мере, это обычно - макрос), обычно определяется к не в коде выпуска. Это только инициирует в коде отладки. Сказав это. Я работал в местах, которые определили их собственное, утверждают макрос, и он инициировал и в режиме отладки и в выпуска.
мне преподавали использовать, утверждает для условия, которое никогда не может быть ложью, такой как предварительные условия для функции.
IIRC, утверждайте (x), макрос, который не оценивает ни к чему, когда NDEBUG определяется, который является стандартом для Сборок конечных версий в Visual Studio.
Только если NDEBUG определяется, я думаю (которым это будет по умолчанию для приложений Visual C++).
Я думаю, что это - ошибка положиться слишком много на точное поведение утверждения. Корректная семантика "утверждает (expr)":