2017-05-03 7 views
-1

更新:問題は本当に簡単で、私は答えをマークしました。ありがとうございました!C++配列インデックスは配列の最後を過ぎています

私はツリー '^'で塗りつぶされた2D配列を使用する単純なコンソールアプリケーションを作成しようとしています。隣接する配列が発火した場合にENTERキーを押して火をつける確率があります。

問題は、配列のインデックスが範囲外になっていることを示しています。これはシミュレーションの更新に失敗します。

これは、エラー画像です:

Buildtime Warning messages. EDIT:これは、マークされた答えはここ

で固定したが、問題を含む更新されたコードです:

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

書くことを意図し

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

問題

を作成している:あなたのupdateForest方法あなたは、次の行を持っています。有効なインデックスは0,1、...、19,20です。無効なインデックス21を使用しようとしました。あなたの配列を大きくするか、これまでにはインデックスを作成しないでください。 – nwp

+0

ソースコードのどの行が警告を引き起こしているのかを本当に示す必要があります。 – Hurkyl

+0

また、なぜ配列インデックス21が問題であるのか、または配列インデックス21がアクセスされているのかという疑問があるかどうかは不明です。 (または何か他のもの) – Hurkyl

答えて

1

は、たぶん、あなたが配列の21個の要素を持っている

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スニペット以下

tempGrid[Max][Max] = grid[Max][Max]; 
関連する問題