如何生成和使用带有 new 的 c++11 std::array 来使用堆而不是堆栈?

How to generate and use a c++11 std::array with new to use the heap instead of the stack?

我知道如果我想在堆上生成一个大数组,我应该使用 std::vector。

但是在我的演讲中我必须使用 std::array 来代替。由于任务需要非常大的数组,我想强制编译器在堆而不是堆栈上创建数组。

我让我的编译器接受它的唯一方法是:

std::array<double,10000000>* array = new array<double,10000000>;

然而,一旦我尝试使用它,程序就会崩溃,因为它似乎会导致内存泄漏。 有没有办法正确解决这个问题?

编辑:

以下是我尝试做的部分工作: 我需要生成一个大数组,然后生成随机数并找到最小值。我认为它的其余部分应该使用相同的机制:

主要内容:

std::array<double,10000000>* array = new array<double,10000000>;

genrate_array(*array);
std::cout<<"Minimum one loop:" << std::endl;
std::cout<<" " << std::endl;
time_measure<start_size, double>(plain_minimum, *array);

第一个模板函数:

template<std::size_t N, typename T>
void genrate_array(std::array<T, N>& test_arr){
    //generate the array
    std::random_device rd;
    std::mt19937 mt(rd());
    std::uniform_real_distribution<T> dist_int( 0.0,500.0);

    for(std::size_t i = 0; i< test_arr.size() ; i++)
    {
        test_arr[i] = dist_int(mt);
    }
}

第二个模板函数:

template<std::size_t N, typename T>
T plain_minimum(std::array<T,N>& arr, std::size_t start_index,std::size_t end_index)
{
    T min = arr[start_index];

    for(std::size_t i = start_index+1; i< end_index ; i++){
        if(min > arr[i])
        {
            min = arr[i];
        }
    }
    return min;
}

这可以编译但几乎立即崩溃。

it seems to causing memory leaks

如果您使用 new 手动分配内存,则必须使用 delete 释放它。如果你忘记删除你分配的内存,它确实会一直泄漏。

更好的方法是使用智能指针来处理重新分配:

std::unique_ptr<std::array<double,10000000>> pointer(new std::array<double,10000000>);

PS。很高兴您认识到 std::vector 更适合于此。我强烈建议您请教您的老师,以阐明您应该从该练习中学到哪些知识。