如何防止以下代码崩溃我的程序?如何防止calloc失败导致我的程序崩溃?
::MessageBox(NULL, L"before", NULL, MB_OK);
void* x = ::calloc(1, -1);
::MessageBox(NULL, L"after", NULL, MB_OK);
当我运行这段代码我得到的消息框“之前”,然后(“本经”永远不会出现的消息框)与“未处理的win32异常”的程序崩溃。
我知道calloc的参数正在通过请求太多的内存使它崩溃!我想知道的是如何防止崩溃,使我得到控制权,并可以通过其他方式处理内存不足?
(Windows XP中的Visual Studio 2005)
我故意传递一个不可能的大小给calloc强制它失败。我试图处理这种情况,当我的程序由于系统内存不足而失败时。这只是模拟这种情况! – user1292915 2012-03-26 11:54:06
本着同样的精神,好的bug报告包含了“期望的行为”,你应该说你期待'calloc()'返回NULL,而不是让程序崩溃。这可以为您节省读过快的用户的评论。 – 2012-03-26 11:59:20
看起来像一个错误,无论如何:http://connect.microsoft.com/VisualStudio/feedback/details/356599/calloc-crashes-if-total-size-heap-maxreq – 2012-03-26 12:02:03