繁体   English   中英

C ++-调试断言在程序退出时失败

[英]C++ - Debug Assertion Failed on program exit

当调用“退出”或让我的程序自行结束时,它会导致调试断言:

调试断言失败

按“重试”并不能帮助我找到问题的根源。 我知道这很可能是由于某处的内存被释放两次而导致的,问题是我不知道在哪里。

整个程序由数十万行组成,这使得很难确切猜测是什么导致了错误。 有没有一种方法可以准确地指出问题的根源,而不必在代码中逐行梳理?

调用栈实际上也没有帮助:

调用堆栈

如果删除已删除的对象,通常会出现这种错误。

如果将一个对象提供给应该拥有第一个对象所有权的多个其他对象,并且两者都尝试在其析构函数中删除它,则会发生这种情况。

正如消息框已经暗示的那样,您可能以某种方式破坏了堆。 您释放/删除了您不应该使用的某个内存块,或者您尝试写入已经释放/删除的某个内存块。

调用堆栈表明,这可能在单步执行main函数的最后一行时发生。 如果真是这样,那么问题可能出在某些用户定义类型的清除例程中,您可以在main函数中创建其实例。 尝试在自己的类的析构函数中设置断点并进行调查。

您可能在程序操作期间破坏了堆,但是直到程序结束才检测到堆,在这种情况下,堆栈跟踪只会指向内存检查例程

您可能在操作期间可以调用一个函数来检查堆是否有效,这可能使失败更接近破坏点

HeapValidate是此类例程的一个示例,但这取决于您使用的平台

当您使用delete[]而不是delete时,也会发生此错误。 但是,如上所述,这只是许多原因之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM