【发布时间】:2011-04-18 23:40:31
【问题描述】:
有时在执行中尝试释放内存时,我会在 VS2010 中收到此错误消息:
Windows 已在 [APPNAME].exe 中触发断点。
这可能是由于堆损坏,这表明 [APPNAME].exe 或其已加载的任何 DLL 中存在错误。
这也可能是由于用户在 [APPNAME].exe 获得焦点时按 F12。
输出窗口可能有更多的诊断信息。
Wich 表示堆或指针有问题。
我的问题是,当我的应用构建为发行版时,此错误会使我的应用崩溃。
此外,这只是更大应用程序的一个模块,当它崩溃时,一切都会崩溃。
我希望能够处理这个错误。
来自“免费”的 msdn:
如果在释放内存时发生错误,则使用来自操作系统的有关故障性质的信息设置 errno。有关详细信息,请参阅 errno、_doserrno、_sys_errlist 和 _sys_nerr。
有一个errno_t _get_errno( int * pValue ); 函数返回错误代码。
如果我在上面显示的错误消息上按继续,此函数将返回错误代码。 使用此代码,我可以检测错误、创建调用堆栈并软退出我的函数。
是否有任何编译器开关或其他东西可以防止应用程序在免费失败时崩溃并允许我以自己的方式退出它??
【问题讨论】:
-
您打算如何退出“我的方式”?如果堆损坏,任何涉及分配或释放内存的进一步操作(即几乎任何有趣的事情)也很可能会崩溃。
-
我是否可以建议您在修复堆损坏错误之前不要将其编译为发行版?这些错误非常令人讨厌,以至于它们让您认为您的应用程序的其他部分已经脱离了真正的来源。
标签: c memory heap-memory free