如何防止calloc故障使我的程序崩溃

How to prevent calloc failure crashing my program?

本文关键字:我的 程序 崩溃 故障 何防止 calloc      更新时间:2023-10-16

如何防止以下代码使程序崩溃?

::MessageBox(NULL, L"before", NULL, MB_OK);
void* x = ::calloc(1, -1);
::MessageBox(NULL, L"after", NULL, MB_OK);

当我运行此代码时,我会收到"before"消息框,然后程序崩溃并出现"unhandled win32 exception"("after"消息框从未出现)。

我知道calloc的args要求太多内存,这让它崩溃了!我想知道的是如何防止崩溃,这样我就可以重新控制并以其他方式处理内存不足的问题?

(Windows XP、Visual Studio 2005)

看起来这是Microsoft calloc中的一个错误(它应该返回null,而不是崩溃):

http://connect.microsoft.com/VisualStudio/feedback/details/356599/calloc-crashes-if-total-size-heap-maxreq

因此,您需要使用他们的C运行时的更新版本。

如果你使用malloc,你可以只在(x==NULL){return GetLastError();}

这不是一个真正的答案,因为我建议了另一个函数,但它应该有效。同时检查SetErrorMode

相关文章: