我已经申请了高分辨率图像.
当我想分配大量内存时,系统会说"应用程序已经请求运行时以不寻常的方式终止它".但我想要的是,分配的指针必须返回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)
与失败时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
使用nothrow:
Img = new (nothrow) point[ImageW*ImageH];
// ^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
现在,如果分配失败,您将获得空指针,而不是异常.