断言,-NDEBUG和分段错误

时间:2011-06-27 12:12:17

标签: c++ c segmentation-fault assert

我有相当多的代码,在开发版本中运行良好,代码中有许多assert()。我通过传递给g ++的-DNDEBUG指令禁用了断言,现在我的代码中断了seg。故障。有什么东西我不知道assert()?

1 个答案:

答案 0 :(得分:7)

断言我知道的最常见问题是在断言本身中包含具有副作用的代码。使用-DNDEBUG进行编译时,断言基本上已被注释掉,因此断言内的代码不会被执行。断言手册页在错误部分提到了这一点:

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.