【发布时间】:2012-03-26 11:51:38
【问题描述】:
如何防止以下代码使我的程序崩溃?
::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)
【问题讨论】:
-
我故意将不可能的大小传递给 calloc 以强制它失败。我正在尝试处理由于系统内存不足而导致程序失败的情况。这只是模拟那种情况!!!
-
本着良好的错误报告包括“预期行为”的精神,您应该说您希望
calloc()返回NULL而不会导致程序崩溃。这样可以节省阅读速度过快的用户的 cmets。 -
顺便说一句,
::calloc(1, -1)不是 C。如果你的程序用某种我一无所知的语言做一些应受谴责的事情,那么你已经发现了一个错误,你应该将其报告给编译器的提供者,而不是在这里。 -
看起来他只是在用 C++ 编译器编译 C(这将使
::calloc有效)。