【发布时间】:2014-06-21 14:37:03
【问题描述】:
我编写了以下代码来为数组分配内存:
try {
int n = 0;
cin >> n;
double *temp = new double[n];
...
}
catch(exception& e) {
cout << "Standard exception: " << e.what() << endl;
exit(1);
}
当然,我正在检查 n 是否有负值等,但是当我输入一些超过 536*(10^6) 的大数字时,我没有得到一个 bad-alloc 异常,而是一个“无效的分配大小:4294967295 字节”崩溃。
例如我输入 n = 536*(10^6) --> bad-alloc 异常 我输入 n = 537*(10^6) --> Invalid Allocation Size: 4294967295 Bytes --> 崩溃
任何想法为什么会发生这种情况?
【问题讨论】:
-
您确定要分配 4GB 吗?
-
在 32 位或 64 位进程上运行?
-
我并不总是想分配那么多内存,但我不希望我的程序在尝试时崩溃……处理器是 Intel E8400,配备 4GB RAM 和 Win7 64 位。我看到我没有足够的内存,但我不明白为什么它没有给我一个 bad-alloc 异常。
-
我认为 @MatthiasB 和 @Lightness Races in Orbit 试图告诉你的是,你可能试图分配更多的内存,要么超过系统拥有的内存,要么超过 OS/CPU 的内存支持。
-
您确定是 536*(10^6) 而不是 536*(10^7)?您可以在
cin>>n之后致电cout<<n以确保这一点吗?
标签: c++ arrays memory-management bad-alloc