2013-12-22 110 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] 

它可能會刪除指針間接的頭痛。