【发布时间】:2014-11-15 21:29:29
【问题描述】:
在尝试使用 new 进行动态内存分配时,我发现可以请求大量内存,以至于实现不会引发 bad_alloc 异常,而只是因无效分配错误而崩溃。我尝试使用一个简单的测试来测试分配的大小
if (n >= SIZE_MAX / sizeof(double))
// throw some exception
else
// try to allocate memory
其中 n 是我尝试分配的双精度数,但我发现通过此测试的请求仍然会导致程序崩溃。是否有一个简单的可移植测试可以确定请求是否安全?
感谢您的宝贵时间。
编辑:抱歉,这是一个在我的系统上崩溃的程序示例。我使用 Visual Studio 2013 创建了该程序。
#include <cstdint>
#include <new>
int main()
{
size_t n = SIZE_MAX / sizeof(double);
double* ptr;
try {
new double[n];
} catch (std::bad_alloc& e){ };
}
【问题讨论】:
-
我很确定它不应该崩溃。您是否尝试过一个最小的示例(即,您能否确定代码中没有隐藏其他错误=> undef.behavior & co)?编译器、操作系统...?
-
如果是编译器错误,您可以尝试使用 gcc 吗?
-
我这个系统上其实只有VS。
-
Why am I getting "Invalid Allocation Size: 4294967295 Bytes" instead of an std::bad_alloc exception? 的可能副本。接受的答案有你要找的。span>
-
接受的答案规定了我在最初问题中提到的相同测试。事实上,这正是我发现上述测试的地方。我创建一个新问题的原因是因为我的系统上的测试失败了。
标签: c++ dynamic-memory-allocation