如何防止calloc失败导致程序崩溃?

时间:2012-03-26 11:51:39

标签: c++ memory crash

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

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

当我运行此代码时,我收到“之前”消息框,然后程序崩溃并出现“未处理的win32异常”(“之后”消息框永远不会出现)。

我知道calloc的args正在通过询问太多的内存而让它崩溃!我想知道的是如何防止崩溃,以便我得到控制权,并可以通过其他方式处理内存不足?

(Windows XP,Visual Studio 2005)

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:0)

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

这不是一个真正的答案,因为我吸了另一个功能,但它应该工作。另请检查SetErrorMode