2017-05-03 184 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];