我已经申请了高分辨率图像。
当我想分配大量内存时,系统会说“应用程序已请求运行时以不寻常的方式终止它”。 但我想要的是,分配的指针必须返回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;
}
答案 0 :(得分:5)
与C中的malloc
不同,它在失败时返回NULL
,C ++中的new
可以抛出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
}
以下是std::bad_alloc
例外的文档:http://en.cppreference.com/w/cpp/memory/new/bad_alloc
答案 1 :(得分:5)
答案 2 :(得分:0)
C ++“new”在失败时不返回null,它调用新的处理程序。