C++ 分配大量内存会导致错误吗?为什么?

C++ 分配大量内存会导致错误吗?为什么?,c++,c,visual-c++,C++,C,Visual C++,我已经做了一个高分辨率图像的应用程序 当我想要分配大量内存时,系统会说应用程序请求运行时以一种不寻常的方式终止它。 但我想要的是,分配的指针必须返回0或NULL,我才能显示消息。它不返回零/空为什么?有什么想法吗?在继续执行MessageBox之前,我检查了debug,它给出了这个错误。在此处如何显示我的消息 有没有办法检查用户分配的内存是否比电脑容量大 谢谢 ImageW = 2000; ImageH = 2000; point *Img = NULL; Img = new point[Ima

我已经做了一个高分辨率图像的应用程序

当我想要分配大量内存时,系统会说应用程序请求运行时以一种不寻常的方式终止它。 但我想要的是,分配的指针必须返回0或NULL,我才能显示消息。它不返回零/空为什么?有什么想法吗?在继续执行MessageBox之前,我检查了debug,它给出了这个错误。在此处如何显示我的消息

有没有办法检查用户分配的内存是否比电脑容量大

谢谢

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; 
}

不同于C中的MalOC,它在失败时返回null,C++中的新可以抛出一个STD::BADYOLL异常,这就是你所看到的。请参阅以供参考

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

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

这里是STD::BADYOLL异常:

< P>与C中的MalOC不同,它在失败时返回NULL,C++中的新可以抛出一个STD::BADYOLL异常,这就是你所看到的。请参阅以供参考

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

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

以下是std::bad_alloc异常的文档:

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

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

使用:

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

使用:



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

如何处理此问题。。有没有办法检查用户分配的内存是否比电脑容量大。。那么,显示我们自己的消息的解决方案是什么?@furqan编辑了我关于如何处理此问题的答案。您必须使用try/catch Not true-look upnothrow@LightnessRacesinOrbit当然,我说过您必须使用try/catch来处理错误的alloc异常。是的,除了创建一个新的name.lib文件外,其他行都在工作?这是什么。。它是否会包含在安装MSI构建中?如何了解这一点。。有没有办法检查用户分配的内存是否比电脑容量大。。那么,显示我们自己的消息的解决方案是什么?@furqan编辑了我关于如何处理此问题的答案。您必须使用try/catch Not true-look upnothrow@LightnessRacesinOrbit当然,我说过您必须使用try/catch来处理错误的alloc异常。是的,除了创建一个新的name.lib文件外,其他行都在工作?这是什么。。它是否会包含在安装MSI构建中?使用nothrow版本的新:我很遗憾计算机没有[我想象的]12MB的内存。使用nothrow版本的新:我很遗憾计算机没有[我想象的]12MB的内存。是的。。诺思罗在工作。。但是为什么visual stuio要在发布文件夹中创建name.lib文件呢。当我们建立一个安装MSI文件时,这个lip文件有什么影响吗@福坎:这是一个完全无关的问题。是的。。诺思罗在工作。。但是为什么visual stuio要在发布文件夹中创建name.lib文件呢。当我们建立一个安装MSI文件时,这个lip文件有什么影响吗@福坎:这是一个完全无关的问题。