以下C ++程序在我的Windows XP计算机上崩溃并显示“异常程序终止”
class Thing {};
int main()
{
for (;;) new Thing();
}
我会说这是一个内存不足的问题,除了我不确定Windows是否接近极限。是Windows故意杀了它吗?如果是这样,它是如何决定的?
答案 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用完了。