是否有任何方法可以防止应用程序在堆损坏时崩溃? - C编程语言

Brl*_*lja 1 c memory heap free

有时在执行中我在尝试释放内存时在VS2010中收到此错误消息:

Windows在[APPNAME] .exe中触发了断点.

这可能是由于堆的损坏,这表示[APPNAME] .exe或它已加载的任何DLL中的错误.

这也可能是由于用户在[APPNAME] .exe具有焦点时按下F12.

输出窗口可能包含更多诊断信息.

这意味着堆或指针有问题.

我的问题是,当我的应用程序构建为发行版时,此错误会崩溃.

此外,这只是一个更大应用程序的模块,当崩溃的时候,这种情况发生了变化.

我希望能够处理这个错误.

来自msdn的"免费":

如果在释放内存时发生错误,则会根据操作系统中有关故障性质的信息设置errno.有关更多信息,请参阅errno,_doserrno,_sys_errlist和_sys_nerr.

有一个errno_t _get_errno( int * pValue );返回错误代码的函数.

如果我按上面显示的错误消息继续按此函数返回错误代码.使用此代码,我可以检测错误,创建调用堆栈并轻轻退出我的函数.

是否有任何编译器开关或什么来防止应用程序在免费失败时崩溃并允许我以我的方式退出?

cHa*_*Hao 8

如果堆已损坏,则所有投注均已关闭. 内存分配可能会失败(除非他们是在栈上),它们可能会返回指针古怪的领域,并在堆上即使现有的东西可以错位面目全非.在这种情况下,你实际上最好不要崩溃,因为你采取的任何行动(甚至试图优雅地退出)都可能使事情变得更糟.

找到在堆上修改内容的代码,然后修复或删除它.