如何计算动态内存请求是否会导致无效分配

时间:2014-09-22 00:24:09

标签: c++ dynamic-memory-allocation

在尝试使用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){ };
 }

1 个答案:

答案 0 :(得分:0)

我相信你遇到这个错误的原因是因为你试图分配4GB内存,在visual studio中你将拥有一个你可以在程序中分配的最大大小,这个值可以在组态。如果您尝试在发布模式下运行程序,它应该会消失,因为Visual Studio没有安全检查发布。

希望这有帮助