Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Assert, -NDEBUG и ошибка сегментации

Автор вопроса: Jakub M.Ответов: 1

У меня есть довольно большой фрагмент кода, который хорошо работает в разрабатываемой версии со многими assert() в коде. Я отключил утверждения с помощью директивы -DNDEBUG, переданной в g++, и теперь мой код ломается из-за seg. вина. Есть ли что-то, чего я не знаю об assert()?

cc++assertsegmentation-fault

Ответы

Ответ 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.

Похожие материалы