2014-03-05 44 views
-1

對於一個家庭作業二維數組,我們被分配到使生成樹對於每個圖形,按區域分開他們,後來在升序顯示他們的生成樹。打印出基於等級

我有一個函數,它執行廣度優先搜索來定義圖形中的連通組件,然後將區域饋送給爲每個區域執行生成樹的函數。我想根據「道路」數量或其具有的非零元素來顯示我的最終生成樹二維數組。所有2d陣列都是鄰接矩陣。

我宣佈我的類聲明的二維數組的數組作爲

int** spantreelist[10]; 

我的樹是2D鄰接矩陣,宣佈

int** trees; 

後來動態分配。

我給你這樣我spantrees:

spantreelist[newcount] = tree; //newcount = number of non 0 elements, different for each tree 
for (int i = 0; i < 10; i++) 
    for (int y = 0; y < cities; y++) 
     for (int r = 0; r < cities; r++) 
     { 
      spantreelist[i][y][r] = tree[y][r]; 

     } 

然而,當我打電話給我的最後spantreelist稍後打印我的二維數組,我得到一個分段錯誤。

for (i = 0; i < 10; i++) 
    for (j = 0; j < cities; j++) 
     for (k = 0; k < cities; k++) 
      cout << spantreelist[i][j][k] <--- seg fault here. 

怪異的一部分,如果我只是寫 COUT < < SPANTREE [2] [3] [4] // 2

我得到我想要的價值。

如何正確地把二維數組到一個數組任何提示將是巨大的。

+0

顯示聲明。 –

回答

0

有作爲C「2D陣列」 ++這樣的東西。只有數組。其中一些碰巧包含其他數組。其他包含有時指向其他數組的指針。將這些結構稱爲2D,任何東西都是誤導性的並且最好避免。

你有10個指針叫做spantreelist的數組。

spantreelist[newcount] = tree; 

此分配給spantreelist陣列的單個元件,索引newcount。所有其他元素都未初始化。

for (i = 0; i < 10; i++) 
    .... 
    spantreelist[i][y][r] = tree[y][r]; 

for (i = 0; i < 10; i++) 
    .... 
    cout << spantreelist[i][j][k] 

將這兩個片段訪問spantreelist數組的所有元素,索引從0到9所有這些但一個是未初始化的。訪問一個未初始化的數組元素是未定義的。

在C++中處理數組的最好方法是通過其標準庫類模板std::vectorstd::array