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

How to calculate if a dynamic memory request will cause an invalid allocation

本文关键字:是否 分配 无效 请求 内存 何计算 计算 动态      更新时间:2023-10-16

在尝试使用new进行动态内存分配时,我发现请求的内存量非常大,以至于实现不会抛出bad_alloc异常,只是由于无效的分配错误而崩溃。我尝试使用一个简单的测试分配的大小

    if (n >= SIZE_MAX / sizeof(double)) 
        // throw some exception
    else 
        // try to allocate memory

其中n是我试图分配的双倍数,但我发现通过此测试的请求仍然会导致程序崩溃。有没有一个简单的便携式测试可以确定请求是否安全?

谢谢你抽出时间。

编辑:很抱歉,这里有一个程序在我的系统上崩溃的例子。我使用visualstudio2013创建了这个程序。

#include <cstdint>
#include <new>
int main()
{
    size_t n = SIZE_MAX / sizeof(double);
    double* ptr;
    try {
        new double[n];
        } catch (std::bad_alloc& e){ };
 }

我相信你遇到这个错误的原因是因为你试图分配4GB的内存,在visual studio中,你将有一个可以在程序中总共分配的最大大小,这个值可以在配置中更改。如果你尝试在发布模式下运行你的程序,它应该会消失,因为visualstudio没有安全的签入版本。

希望这能帮助