在尝试使用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){ };
}
答案 0 :(得分:0)
我相信你遇到这个错误的原因是因为你试图分配4GB内存,在visual studio中你将拥有一个你可以在程序中分配的最大大小,这个值可以在组态。如果您尝试在发布模式下运行程序,它应该会消失,因为Visual Studio没有安全检查发布。
希望这有帮助