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

时间:2012-10-16 01:52:12

标签: 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; 
}

3 个答案:

答案 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)

使用nothrow

Img = new (nothrow) point[ImageW*ImageH];
//        ^^^^^^^^^^

现在,如果分配失败,您将得到一个空指针,而不是异常。

答案 2 :(得分:0)

C ++“new”在失败时不返回null,它调用新的处理程序。