C++数组索引超过了数组的末尾
问题描述:
更新:所以问题很简单,我标记了答案。谢谢!C++数组索引超过了数组的末尾
所以我试图制作一个简单的控制台应用程序,它使用填充了树'^'的2D数组,每当有命中时,如果相邻阵列发生火灾,就有可能触发设置。
问题是数组索引告诉我我超出了界限,并且失败了我的模拟更新。
这是误差图像:
这里是包含问题的更新的代码:
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];
}
}
}
答
下面的代码段创建问题
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];
}
}
答
C++阵列在索引开始:0 具有21个对象的阵列的最大索引号为“20”
答
In您updateForest方法,你有下面这行:
tempGrid[Max][Max] = grid[Max][Max];
数组有21个元素。有效索引是0,1,...,19和20.您试图使用索引21,这是无效的。让你的数组变大或不索引到目前为止。 – nwp
你真的应该指出源代码中的哪一行触发警告。 – Hurkyl
此外,目前还不清楚你的问题是为什么数组索引21应该是一个问题,或为什么数组索引21被访问。 (或别的东西) – Hurkyl