У меня есть довольно большой фрагмент кода, который хорошо работает в разрабатываемой версии со многими assert() в коде. Я отключил утверждения с помощью директивы -DNDEBUG, переданной в g++, и теперь мой код ломается из-за seg. вина. Есть ли что-то, чего я не знаю об assert()?
Вопрос
Assert, -NDEBUG и ошибка сегментации
Ответы
Ответ 1 · рейтинг 7 · wollw
Насколько мне известно, наиболее распространенной проблемой с assert является наличие кода с побочными эффектами внутри самого assert. При компиляции с параметром -DNDEBUG утверждения по существу закомментированы, поэтому код внутри утверждения не выполняется. Страница руководства assert упоминает об этом в разделе ошибок:
BUGS
assert() is implemented as a macro; if the expression tested has side-
effects, program behavior will be different depending on whether NDEBUG
is defined. This may create Heisenbugs which go away when debugging is
turned on.
Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.
Похожие материалы
- Как читать числа из файла и сохранять их среднее значение в тот же файл?
- Элемент инициализатора не является постоянным при использовании постоянных структур
- Почему openssl/ssl.h не содержит ничего, кроме относительного пути?
- Сравните два файла побайтно
- Вопросы о том, как работает передача аргументов в C++
- Дескриптор Windows для портативного устройства