【发布时间】:2015-08-08 08:14:59
【问题描述】:
我有密码
#include <iostream>
using namespace std;
int main()
{
while(true)
{
try
{
new int;
}
catch(std::exception e)
{
}
}
return 0;
}
因此,当我在 Linux 下运行此代码时,我的计算机在内存用完时会冻结(如预期的那样),但是当我在 Windows 上时,我的应用程序在分配 3 GB 内存后崩溃(通常我使用了 1 GB,总共 16 个)。为什么会崩溃?如何预防?
当我将new int 替换为malloc(1) 时,分配这3 GB 后,内存不会分配更多
【问题讨论】:
-
“崩溃”是怎么回事?你到底想做什么?
-
你的
catch没用。在抛出bad_alloc异常后,您不能调用new,并且在该上下文中不可能发生其他异常。 -
此外,编译器可能会看到您实际上并未存储
new返回值并优化调用。 -
异常也应该被 const 引用 not 按值捕获。
-
看你的代码我什至不明白你打算做什么?
标签: c++ windows memory allocation