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

0 c++ memory windows exception

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

class Thing {};
int main()
{    
    for (;;) new Thing();    
}
Run Code Online (Sandbox Code Playgroud)

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

And*_*Dog 8

你是对的,它是一个内存不足的问题导致你的程序结束.但是,不是Windows决定以"异常程序终止"结束它.它是C++运行时(Windows上的"msvcrt*.dll"),std::bad_allocnew 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;
    }        
}
Run Code Online (Sandbox Code Playgroud)

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