程序中的分段错误

时间:2017-01-03 09:13:44

标签: c++ arrays

我正在尝试为我的炸弹人类型游戏实现广度优先搜索算法,其中墙由1表示,楼层由0表示。我希望函数FindDepth给出从位置A到位置B的最短距离,考虑到我们不能重叠墙壁。问题是我在下面的程序中遇到了分段错误。

int FindDepth(int grid[5][5], Position A, Position B)
{
    if ((A.x == B.x) && (A.y == B.y)) return 0;

    int dist[] = {0,0,0,0};
    if(A.x - 1 > -1)
    if(grid[A.y][A.x - 1] == FLOOR) {
        dist[0] = FindDepth(grid, {A.x-1,A.y}, B);
    }

    if(A.x + 1 < 6)
    if(grid[A.y][A.x + 1] == FLOOR) {
        dist[1] = FindDepth(grid, {A.x+1,A.y}, B);
    }

    if(A.y - 1 > -1)
    if(grid[A.y - 1][A.x] == FLOOR) {
        dist[2] = FindDepth(grid, {A.x,A.y - 1}, B);
    }

    if(A.y + 1 < 6)
    if(grid[A.y + 1][A.x] == FLOOR) {
        dist[3] = FindDepth(grid, {A.x,A.y + 1}, B);
    }
    int largest = -1;
    for(int i = 0; i < 4; i++) {
        if(dist[i] > largest) {
            largest = dist[i];
        }
    }   
    return largest;
}

这是完整的代码。

2 个答案:

答案 0 :(得分:5)

问题可能在于这一行:

if(A.x + 1 < 6)

您正在检查A.x + 1 <6。如果是5怎么办? grid是一个包含5个元素的数组,这意味着它的索引是0到4.如果A.x + 1是5,那么你将步入数组的已分配内存之外。

希望这有帮助。

答案 1 :(得分:4)

A.x + 1 < 6应为A.x + 1 < 5。同样适用于A.y + 1