大量内存的分配会产生错误吗?为什么?

max*_*yne 1 c c++ visual-c++

我已经申请了高分辨率图像.

当我想分配大量内存时,系统会说"应用程序已经请求运行时以不寻常的方式终止它".但我想要的是,分配的指针必须返回0或NULL,我可以显示我的消息.它不返回零/ NULL为什么?任何的想法?我检查了调试,然后继续到MessageBox,它给出了这个错误.该怎么做才能显示我的信息?

有没有办法检查用户是否要分配足够大的内存而不是计算机PC容量?

谢谢.

ImageW = 2000;
ImageH = 2000;
point *Img = NULL;
Img = new point[ImageW*ImageH];
if(Img== NULL)
{   
MessageBox(0, "Your computer memory is too small.", "Error", MB_ICONERROR | MB_OK);
return; 
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*kiy 5

与失败时malloc返回的C 不同NULL,new在C++中可以抛出std :: bad_alloc异常,这就是你所看到的.请参阅http://en.cppreference.com/w/cpp/memory/new/operator_new以供参考

要处理此异常,您可以使用try/catch:

try {
    Img = new point[ImageW*ImageH];
}
catch (std::bad_alloc const& e) {
    // handle failure here, like displaying a message
}
Run Code Online (Sandbox Code Playgroud)

以下是该std::bad_alloc例外的文档:http://en.cppreference.com/w/cpp/memory/new/bad_alloc


Lig*_*ica 5

使用nothrow:

Img = new (nothrow) point[ImageW*ImageH];
//        ^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

现在,如果分配失败,您将获得空指针,而不是异常.