因此很多人都发布了关于编译器优化如何将错误引入程序的堆栈溢出。但是,我遇到了相反的问题。我正在编写一个C ++程序,我有一个看似未定义的行为的错误,只有在我将XCode的编译器设置为off(None [-O0])时才会显示。如果我将其设置为"最快,积极的优化[-Ofast]",则该错误消失。
所以我想知道是否有人有任何优化摆脱错误的经验(而不是更常见的优化引入错误的情况)。这有什么常见的原因?我有点不知道该做什么或在哪里检查。
答案 0 :(得分:1)
优化可以更改表达式的评估顺序,因此,如果您的错误是结果,例如,foo()
和bar()
中的指定评估顺序的结果:
some_function(foo(), bar());
然后不同的优化设置会暴露错误,而其他优化设置会隐藏它。
还有很多其他可能性。
答案 1 :(得分:0)
启用优化可以使释放的堆栈/堆内存包含有效数据的时间比调试版本中的更长。有些编译器甚至在调试版本中擦除释放的堆栈/堆内存,这意味着释放的数据立即无效。