c++ - 数组维度的变化导致 C++ 崩溃

标签 c++ stdarray

我的程序中需要一些大数组,我正在用 size=16*16*12*12 的数组对其进行测试。

然后我将我的程序更改为以 size=64*64*12*12 运行,它甚至在进入 main 之前就崩溃了

问题是这样的数组占用太多内存吗?我试着在我的笔记本电脑上运行代码,然后也在一些更强大的台式机上运行代码,在这两种情况下,更大的数组都会立即崩溃,并适用于较小的阵列。数组大小由在代码开头声明的 const int 控制。我用

    std::array<double, (64*64*12*12)>.

提前致谢

更新: 我编写的具有相同问题的最小程序如下:

    #include <iostream>
    #include <array>
    using namespace std;
    //declare variables
    using std::array;
    const int size_q=2;
    const int qpoints=size_q*size_q*size_q;
    const int size_k=2;
    const int kpoints=size_k*size_k*size_k;
    const int branches=12;
    const int size_ph=kpoints*branches;
    const int size_Theta=size_ph*size_ph;
    array<double, size_Theta> f_ph(array<double,size_Theta>);


    int main(int argc, char const *argv[])
    {
    array<double, size_Theta> theta1;
    f_ph(theta1);
    cout <<"Done";
    return 0;
    }
    array<double, size_Theta> f_ph(array<double,size_Theta> theta1){
    for(int i=0;i<size_Theta;i++){
    theta1[i]=1.00;
    }
    return theta1;

**更新:看来确实是内存问题,使用std::vector程序运行流畅**

最佳答案

您很可能在自动存储(“堆栈”)上用完了内存。

您可以使用 vector :

#include <vector>
std::vector<double> arr(64*64*12*12);
arr[0]; // access first element

或者,如果您不需要 vector 提供的灵 active ,您可以使用 unique_ptr:

#include <memory>
auto arr = std::make_unique<std::array<double, (64*64*12*12)>>();
(*arr)[0]; // access first element

关于c++ - 数组维度的变化导致 C++ 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56128336/

相关文章:

c++ - 将参数传递给比较函数?

c++ - Visual Studio 2012 中的假变量

c++ - 如何使用 luajit 在带有变量参数的 c 函数中获取 cdata?

c++ - std::array 中的编译时间范围检查

c++ - 具有私有(private)构造函数和自身静态数组的类

c++运算符函数内未声明的标识符

c++ - 复杂模型 : no solution

c++ - 获取 std::array 的第二个参数(大小)作为函数参数

c++ - 使用 'overloaded' lambdas 在函数中使用 std::array

c++ - 是否有一种代码密集度较低的方法来使用非默认构造函数初始化数组?