繁体   English   中英

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

[英]How to allocate memory for a static n-dimensional array in c++

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

由于我在编译时不知道大小是多少,因此无法将其定义为int[a][b] ,所以我尝试使用指向类似int**指针,但是当我声明int** arr; arr[0][0] = 1 int** arr; arr[0][0] = 1我收到一个错误。 我也尝试了其他解决方案。 例如,我尝试使用int* arr; arr = new int[a] 在构造函数初始值设定项中确定数组大小的答案之一int* arr; arr = new int[a] int* arr; arr = new int[a] ,但是一旦我尝试将其用于两个维度,它似乎就无法工作。 当然,我可能没有正确使用它,但是以下代码块给了我一个segfault:

int** arr;
(*arr) = new int[a];

编辑:当然,在我问了这个问题之后,我发现在C ++中关于二维数组的动态内存分配的“需要帮助”中有些适合。 我不想这样做,但是绝对可以。

您将执行以下操作(此答案中的内容被盗):

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]

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM