Утверждают (ложь), проигнорированная в режиме выпуска?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

24
задан jww 26 July 2019 в 06:45
поделиться

5 ответов

Если компиляция в режиме выпуска включает определение NDEBUG, то да.

Видят , утверждают (CRT)

26
ответ дан bejado 28 November 2019 в 23:39
поделиться

Утверждать макрос (по крайней мере, это обычно - макрос), обычно определяется к не в коде выпуска. Это только инициирует в коде отладки. Сказав это. Я работал в местах, которые определили их собственное, утверждают макрос, и он инициировал и в режиме отладки и в выпуска.

мне преподавали использовать, утверждает для условия, которое никогда не может быть ложью, такой как предварительные условия для функции.

6
ответ дан grieve 28 November 2019 в 23:39
поделиться

IIRC, утверждайте (x), макрос, который не оценивает ни к чему, когда NDEBUG определяется, который является стандартом для Сборок конечных версий в Visual Studio.

5
ответ дан Harper Shelby 28 November 2019 в 23:39
поделиться

Только если NDEBUG определяется, я думаю (которым это будет по умолчанию для приложений Visual C++).

2
ответ дан Rob 28 November 2019 в 23:39
поделиться

Я думаю, что это - ошибка положиться слишком много на точное поведение утверждения. Корректная семантика "утверждает (expr)":

  • выражение expr может или не может быть оценено.
  • , Если expr верен, выполнение обычно продолжается.
  • , Если expr является ложью, что происходит, не определено.
[еще 115] в http://nedbatchelder.com/text/assert.html

1
ответ дан Ned Batchelder 28 November 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: