2017-05-03 461 views
-1

更新:所以問題很簡單,我標記了答案。謝謝!C++數組索引超過了數組的末尾

所以我試圖製作一個簡單的控制檯應用程序,它使用填充了樹'^'的2D數組,每當有命中時,如果相鄰陣列發生火災,就有可能觸發設置。

問題是數組索引告訴我我超出了界限,並且失敗了我的模擬更新。

這是誤差圖像:

Buildtime Warning messages. 編輯:這是固定的與所述標記的答案

這裏是包含問題的更新的代碼:

void updateForest(char grid[Max][Max], int probFactor) 
{ 
    char tempGrid[Max][Max]; 

    for (int r = 0; r < Max; r++) 
    { 
     for (int c = 0; c < Max; c++) 
     { 
      tempGrid[Max][Max] = grid[Max][Max]; 
     } 
    } 

    for (int r = 1; r < Max - 1; r++) 
    { 
     for (int c = 1; c < Max - 1; c++) 
     { 
      if (checkNeighbour(grid, r, c)) 
      { 
       if ((rand()%100)+1 < probFactor && grid[r][c] == Tree) 
       { 
        tempGrid[r][c] = Burning; 
       } 
       if (grid[r][c] == Burning) 
       { 
        tempGrid[r][c] = Empty; 
       } 
      } 
     } 
    } 

    for (int r = 0; r < Max; r++) 
    { 
     for (int c = 0; c < Max; c++) 
     { 
      grid[r][c] = tempGrid[r][c]; 
     } 
    } 

} 
+0

數組有21個元素。有效索引是0,1,...,19和20.您試圖使用索引21,這是無效的。讓你的數組變大或不索引到目前爲止。 – nwp

+0

你真的應該指出源代碼中的哪一行觸發警告。 – Hurkyl

+0

此外,目前還不清楚你的問題是爲什麼數組索引21應該是一個問題,或爲什麼數組索引21被訪問。 (或別的東西) – Hurkyl

回答

1

下面的代碼段創建問題

for (int r = 0; r < Max; r++) 
    { 
     for (int c = 0; c < Max; c++) 
     { 
      tempGrid[Max][Max] = grid[Max][Max]; 
     } 
    } 

也許你打算寫

for (int r = 0; r < Max; r++) 
    { 
     for (int c = 0; c < Max; c++) 
     { 
      tempGrid[r][c] = grid[r][c]; 
     } 
    } 
2

C++陣列在索引開始:0 具有21個對象的陣列的最大索引號爲「20」

1

In您updateForest方法,你有下面這行:

tempGrid[Max][Max] = grid[Max][Max];