CMake Release使我的代码停止正常工作

时间:2014-02-13 10:30:03

标签: c++ boost cmake release

我有一个C ++程序,当我编译时没有其他选项。但是,每当我使用cmake -DCMAKE_BUILD_TYPE = Release时,代码的一个非常特定的部分就会停止工作。

具体来说,我有一个Boost Fibonacci堆的接口。我叫这个函数:

narrow_band_.push(myObject);

此功能执行以下操作:

inline void myHeap::push (myStruct & c) {
    handles_[c.getIndex()] = heap_.push(c);
}

其中heap_是:

boost::heap::fibonacci_heap<myStruct, boost::heap::compare<compare_func>> heap_;

由于某种原因,heap_size没有被修改,因此其余代码不起作用,因为下一步是从堆中提取最小值并且它总是为空。

在调试模式下,它可以正常工作。谢谢你的帮助。

编辑 - 其他信息 我也发现了这个问题:我有一组代码可以进行简单的数学运算。在发布模式下,结果不正确。如果我只是做几个变量的cout来检查它们的值,结果会发生变化,这仍然是不正确的,但很奇怪。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。这很有趣,但在这种情况下,它不是发布模式中常见的初始化/计时问题。这是在几个函数中缺少return语句。在调试模式下,输出是完美的,但在发布模式下失败。我停用了警告,这就是为什么我之前没有看到它。