如何在c ++中为静态n维数组分配内存

时间:2013-12-22 06:34:17

标签: c++ arrays

在运行时在c ++中为n维数组分配内存的最佳方法是什么?我试图从文件中读取值的矩阵,并且根据我读取的文件,矩阵可以是任何大小。但是,一旦创建了矩阵,它的大小就是静态的。

由于我在编译时不知道大小是多少,我无法将其定义为int[a][b],因此我正在尝试使用指向int**的指针,但是我声明int** arr; arr[0][0] = 1我收到错误。我也尝试过其他解决方案。例如,我尝试使用int* arr; arr = new int[a]的一个答案,使用int** arr; (*arr) = new int[a]; ,但是一旦我尝试将它用于二维,它似乎不起作用。当然,我可能会错误地使用它,但下面的代码块给了我一个段错误:

{{1}}

编辑:当然,在我提出这个问题之后,我在Determine array size in constructor initializer找到了一些半合适的东西。我不想这样做,但这绝对可行。

1 个答案:

答案 0 :(得分:0)

你会这样做(从answer中偷来的):

int** ary = new int*[sizeX];
for(int i = 0; i < sizeX; ++i)
    ary[i] = new int[sizeY];

或者,你可以这样做:

int *ary = new int[sizeX*sizeY];

// ary[i][j] is then rewritten as
ary[i*sizeY+j]

它可能会消除指针间接的麻烦。