C递归分段错误

C递归分段错误,c,recursion,segmentation-fault,C,Recursion,Segmentation Fault,我是C新手,正在尝试做一个迷宫问题,其中0和字母是通过点,1是障碍 我的2D迷宫数组如下所示,起点在(0,4),每次我必须检查4个方向(N、S、E、W),我还有路径数组(最初包含“0”作为字符),其中我将把路径作为“R”,同样大小: 1111S11110 0000010001 110100010d t001111110 0100000001 0111111101 1111111101 00000D01T1 0111110001 0000E01110 我使用递归解决方案进行寻路,总

我是C新手,正在尝试做一个迷宫问题,其中0和字母是通过点,1是障碍

我的2D迷宫数组如下所示,起点在(0,4),每次我必须检查4个方向(N、S、E、W),我还有路径数组(最初包含“0”作为字符),其中我将把路径作为“R”,同样大小:

1111S11110       
0000010001
110100010d
t001111110
0100000001
0111111101
1111111101
00000D01T1
0111110001
0000E01110
我使用递归解决方案进行寻路,总共使用3个函数,如下所示:

int isSafe(char Mazearray[matrixSize][matrixSize],int x,int y){
    if(x >= 0 && x < matrixSize && y >= 0 && y < matrixSize && Mazearray[x][y] != '1'){
        return 1;
    }
    return 0;


}

void MazeSolution(char Mazearray[matrixSize][matrixSize],int x,int y,char pathArray[matrixSize][matrixSize]){
    if(recursiveMaze(Mazearray,x,y,pathArray) == 0){
        printf("There does not exist a possible solution!!!");
    }
    else{
        int i,j;
        for (i = 0; i < matrixSize; ++i){
            for (j = 0; j < matrixSize; ++j){
                printf("%c",pathArray[i][j]);
            }
        printf("\n");
        }
    }
}

int recursiveMaze(char Mazearray[matrixSize][matrixSize],int x,int y,char pathArray[matrixSize][matrixSize]){
    if(x == exitX && y == exitY){
        pathArray[x][y] == 'E';
        return 1;
    }
    // check if the coordinate is safe to go(not 1)
    if(isSafe(Mazearray,x,y) == 1){
        pathArray[x][y] == 'R';
        // Move North
        if(recursiveMaze(Mazearray,x-1,y,pathArray) == 1){
            return 1;
        }
        // Move South
        if(recursiveMaze(Mazearray,x+1,y,pathArray) == 1){
            return 1;
        }
        // Move East
        if(recursiveMaze(Mazearray,x,y+1,pathArray) == 1){
            return 1;
        }
        // Move West
        if(recursiveMaze(Mazearray,x-1,y-1,pathArray) == 1){
            return 1;
        }
        pathArray[x][y] == '0';
        return 0;
    }
    return 0;
}
int-isSafe(char-mazarray[matrixSize][matrixSize],int-x,int-y){
如果(x>=0&&x=0&&y
当我运行
MazeSolution()
时,程序终止,出现错误代码255和分段错误。当我调试时,问题出现在
recursiveMaze()
函数中


因此,从第一个if语句开始,它不执行,另一个问题是它在南控制点和北控制点之间往返。

这里是一个导致无限循环的调用序列:

recursiveMaze(M, x, y, p)
   recursiveMaze(M, x-1, y, p)
       recursiveMaze(M, x-1, y, p) -> run to completion
       recursiveMaze(M, x+1, y, p) -> infinite loop

它是无限的,因为在第二次递归调用中,您会将在第一次递归调用中递减的值加回去,这会使您回到与初始调用相同的状态。

使用-g编译并在gdb下运行(在linux上运行)。这至少表明你的“西方”是错误的。应在y轴上严格调整;不是x<代码>x-1,y-1实际上是对角线移动。无论如何,包括构建矩阵的代码;事实上,这是一个最少的、完整的例子来说明你的问题。如果你删除了加载数组的代码,或者为你正在使用的四个全局变量加了素数,那么阅读这段代码是没有意义的。你确定你需要最后一次返回0吗?它可能是返回1吗?(因为什么都没有发生,所以一切都很好?)什么是
pathArray[x][y]=“E”应该怎么做?如果要分配,它应该是
=
。如果要进行比较,它需要在
If
测试中。没有什么可以阻止无限递归。当你测试北方,它会测试南方,回到同一个地方,然后他们会像这样来回。