我的C ++程序如何在内存不足时终止?

时间:2010-03-24 18:43:26

标签: c++ windows exception memory

以下C ++程序在我的Windows XP计算机上崩溃并显示“异常程序终止”

class Thing {};
int main()
{    
    for (;;) new Thing();    
}

我会说这是一个内存不足的问题,除了我不确定Windows是否接近极限。是Windows故意杀了它吗?如果是这样,它是如何决定的?

4 个答案:

答案 0 :(得分:8)

你是对的,这是一个导致程序结束的内存不足问题。但是,不是Windows决定以“异常程序终止”结束它。它是C ++运行时(Windows上的“msvcrt * .dll”),当std::bad_alloc无法分配内存时会引发new Thing异常。

您可以通过简单的更改来验证:

#include <exception>
#include <iostream>
class Thing {};
int main()
{
    try
    {    
        for (;;) new Thing();    
    }
    catch(std::bad_alloc e)
    {
        std::cout << "ending with bad_alloc" << std::endl;
    }        
}

当程序内存不足时,这将正常结束程序。如果你没有捕获该异常,那么未处理的异常将由C ++运行时处理,从而创建着名的“异常程序终止”消息(或类似的东西)。

答案 1 :(得分:3)

CRT正在杀死你的程序。未处理异常(此处为std :: bad_alloc)所需的行为是对terminate()的调用。在MSVC实现中显示“异常程序终止”消息,并调用abort()来终止该程序。

答案 2 :(得分:1)

您是否尝试在调试中运行它?

在我的情况下(Win7)它给出了这个错误:这个应用程序已经请求Runtime以一种不寻常的方式终止它。请联系应用程序的支持团队以获取更多信息。

但是在调试模式下,它显示运算符new抛出了exc_alloc,它确实意味着内存不足。

答案 3 :(得分:0)

毫无疑问,你的VM用完了。