c++ - 正确处理内存限制?

标签 c++ memory

我的类变量之一是二维数组。 大小取决于用户输入。 用户可能会输入超过其硬件限制的大小。 所以我想妥善处理这件事。 以下代码是否正确?

        int counter;
        try
        {
            int size = 20000;//this is actually from user input
            array = new double*[size];
            for(counter = 0; counter < size; counter++)
                array[counter] = new double[size];
        }
        catch(std::bad_alloc)
        {
            try
            {
                for(int i = 0; i < counter; i++)
                    delete[] array([i]);

                delete[] array;
                array = NULL;

                //display limitation message
                size = 2;
                array = new double*[size];
                for(int i = 0; i < size; i++)
                    array[i] = new double[size];
            }
            //catch again & exit application
        }

最佳答案

你最好的选择是:

std::vector<std::vector<double>>  array(size, std::vector<double>(size));

但是如果您必须手动执行,那么:

void init_array(int size)
{
    int counter;
    try
    {
        array = new double*[size];

        // Don't shadow counter here.
        for(counter = 0; counter < size; counter++)
        {
            array[counter] = new double[size];
        }
    }
    catch(std::bad_alloc)
    {
        // delete in reverse order to mimic other containers.
        for(--counter; counter >= 0;--counter)
        {
            delete[] array[counter];
        }

        delete[] array;

        // retry the call with a smaller size.
        // A loop would also work. Depending on context.
        // Don't nest another try{} catch block. because your code will
        // just get convoluted.
        init_array(size/2);
    }

关于c++ - 正确处理内存限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19485946/

相关文章:

用于 Diffie-Hellman key 交换的 C++ GMP 随机数生成

c++ - 使用不同的模板参数转换模板对象,这怎么可能?

c++ - vector 中的动态对象创建

c++ - 通过传递外部指针或通过内部调用 new 构造的类,我可以在销毁时天真地删除这个指针吗?

java - 将集合转换为数组,无需额外内存

c++ - 取消选择 QTableView 中的单行

c++ - 在 map 中使用已删除的元素

memory - Node.js 内存泄漏

c - 嵌入式设备的内存分配/释放

c# - WPF多个控件OutOfMemory