2013-12-22 70 views
0

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

因为我不是在编译时知道的大小将是什么,我不能把它定义为int[a][b],所以我是用指针的指针一样int**实验,但是当我宣布int** arr; arr[0][0] = 1我得到一个错误。我也尝试过其他解决方案。例如,我尝试使用Determine array size in constructor initializer的其中一个答案,使用int* arr; arr = new int[a],但似乎没有工作,一旦我尝试使用它的两个维度。当然,我可能会错误地使用它,但下面的代码块给我一个段错误:

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

编辑:当然,之后我问的问题,我发现一些半适用于Need help regarding Dynamic Memory Allocation for two dimensional arrays in C++。我不想这样做,但它绝对是可行的。

+2

您也可以将它分配到一个数组中,然后使用索引访问它。比如'index = x * width + y'。 – Thomas

回答

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] 

它可能会删除指针间接的头痛。