繁体   English   中英

如何防止calloc故障导致我的程序崩溃?

[英]How to prevent calloc failure crashing my program?

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

::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

暂无
暂无

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

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