1

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

当我想分配大量内存时,系统显示“应用程序已请求运行时以不寻常的方式终止它”。但我想要的是,分配的指针必须返回 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; 
}
4

3 回答 3

5

使用nothrow

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

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

于 2012-10-16T01:59:07.700 回答
5

Unlike malloc in C which returns NULL on failure, new in C++ can throw a std::bad_alloc exception which is what you're seeing. See http://en.cppreference.com/w/cpp/memory/new/operator_new for reference

To handle this exception you can use try/catch:

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

Here's documentation for the std::bad_alloc exception: http://en.cppreference.com/w/cpp/memory/new/bad_alloc

于 2012-10-16T01:54:44.940 回答
0

C++ "new" does not return null on failure, it calls the new handler.

于 2012-10-16T01:55:51.040 回答