C ++ - Debug Assertion在程序退出时失败

时间:2014-03-18 09:29:22

标签: c++ exit assertion

当调用'exit'或让我的程序结束时,它会导致调试断言:

Debug Assertion Failed http://puu.sh/7zQjZ.png

按'重试'并不能帮助我找到问题的根源。我知道这很可能是因为内存在某处被释放两次,问题是我不知道在哪里。

整个程序由数十万行组成,因此很难猜测导致错误的确切原因。有没有办法准确地告诉问题的来源在哪里,而不必梳理线以通过代码?

callstack也没有任何帮助:

Callstack http://puu.sh/7zTFx.png

4 个答案:

答案 0 :(得分:1)

如果您删除已删除的对象,则会出现此类错误。

如果一个对象被赋予多个其他对象,而这些对象应该取得第一个对象的所有权并且都试图在它们的析构函数中删除它。

答案 1 :(得分:1)

正如消息框已经暗示的那样,你可能在某种程度上破坏了你的堆。您可以释放/删除一些您不应该删除的内存块,或者您尝试写入已经释放/删除的内存块。

callstack表示,当你踩到main函数的最后一行时,可能会发生这种情况。如果是这种情况,那么问题可能出在一些用户定义类型的清理例程中,您可以在main函数中创建实例。尝试在自己的类的析构函数中设置断点并进行调查。

答案 2 :(得分:1)

在程序运行期间可能会损坏堆,但在程序结束之前不会检测到堆,在这种情况下堆栈跟踪只会指向内存检查例程

在操作期间可能有一个函数可以检查堆是否有效,这可能会使失败更接近腐败点

HeapValidate是这种例程的一个例子,但它取决于你使用的平台

答案 3 :(得分:1)

使用delete[]代替delete时也会发生此错误。但是,如上所述,这只是众多原因中的一个。