0 c++ memory windows exception
以下C++程序在我的Windows XP计算机上崩溃,并显示"异常程序终止"消息
class Thing {};
int main()
{
for (;;) new Thing();
}
Run Code Online (Sandbox Code Playgroud)
我会说这是一个内存不足的问题,除了我不确定Windows是否接近极限.是Windows故意杀了它吗?如果是这样,它是如何决定的?
你是对的,它是一个内存不足的问题导致你的程序结束.但是,不是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;
}
}
Run Code Online (Sandbox Code Playgroud)
当程序内存不足时,这将正常结束程序.如果没有捕获该异常,则未处理的异常将由C++运行时处理,从而创建着名的"异常程序终止"消息(或类似的东西).