如何防止以下代码崩溃我的程序?
::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)
答案 0 :(得分:5)
看起来这是Microsoft calloc中的一个错误(它应该返回null,而不是崩溃):
因此,您需要使用较新版本的C运行时。
答案 1 :(得分:0)
如果你使用malloc,你可以只使用if(x == NULL){return GetLastError();}
这不是一个真正的答案,因为我吸了另一个功能,但它应该工作。另请检查SetErrorMode