2008-12-11 41 views
0

我試圖運行一個3d數組,但代碼只是在Windows中崩潰時,我運行它,這裏是我的代碼;C++ 3d arrays

#include <iostream> 

using namespace std; 

int main(){ 

    int myArray[10][10][10]; 

    for (int i = 0; i <= 9; ++i){ 
     for (int t = 0; t <=9; ++t){    
      for (int x = 0; x <= 9; ++t){ 

       myArray[i][t][x] = i+t+x; 

      } 

     } 

    } 


    for (int i = 0; i <= 9; ++i){ 
     for (int t = 0; t <=9; ++t){ 
      for (int x = 0; x <= 9; ++t){ 

       cout << myArray[i][t][x] << endl; 

      } 

     } 

    } 

    system("pause"); 

} 

有人可以把我速戰速決/解釋

回答

14

你兩次也行

for (int x = 0; x <= 9; ++t){ 

當你的意思是

for (int x = 0; x <= 9; ++x){ 

經典複製和粘貼錯誤。

順便說一句,如果你在調試器中運行它並查看變量的值,很容易看到發生了什麼。

+0

選擇這個答案,並用它做。 – Tim 2008-12-11 18:57:10

+0

通過在第一個嵌套循環中包含「cout <<」行,您也可以找到同樣的結果。 – BIBD 2008-12-11 18:59:06

2

大衛的回答是正確的。順便說一句,慣例是使用i,j和k作爲嵌套迭代器索引,並且使用< array_length而不是< = array_length -1作爲終止符。

如果你這樣做,那麼你可以使數組大小不變,並擺脫一些神奇的數字。

此外,您使用數組索引處的斷言可能會將您指向錯誤。

結果可能看起來像:

const std::size_t ARRAY_SIZE = 10; 

int myArray[ARRAY_SIZE][ARRAY_SIZE][ARRAY_SIZE]; 

for (std::size_t i = 0; i < ARRAY_SIZE; ++i) 
{ 
    for (std::size_t j = 0; j < ARRAY_SIZE; ++j) 
    { 
     for (std::size_t k = 0; k < ARRAY_SIZE; ++k) 
     { 
      std::assert (i < ARRAY_SIZE && j < ARRAY_SIZE && k < ARRAY_SIZE); 
      // Do stuff 
     } 
    } 
}