C语言中的分段错误,广度优先搜索

C语言中的分段错误,广度优先搜索,c,pointers,malloc,breadth-first-search,C,Pointers,Malloc,Breadth First Search,我试图直接访问c语言中的内存。我需要它,因为我的数组大小需要是动态的。有一个包含广度优先搜索算法的代码块,我错在哪里 int visited[h][w]; int parent[h][w][2]; // Width, Height, {x,y} int d[] = {0, -1, 0, 1, 1, 0, -1, 0}; int p[2]; int cell[2]; int *q = (int*)malloc(10000*sizeof(int)); int front = 0, rear = 0;

我试图直接访问c语言中的内存。我需要它,因为我的数组大小需要是动态的。有一个包含广度优先搜索算法的代码块,我错在哪里

int visited[h][w];
int parent[h][w][2]; // Width, Height, {x,y}
int d[] = {0, -1, 0, 1, 1, 0, -1, 0};
int p[2];
int cell[2];
int *q = (int*)malloc(10000*sizeof(int));
int front = 0, rear = 0;
q[front++]=sPoint[0];
q[front++]=sPoint[1];

visited[sPoint[1]][sPoint[0]] = 1;
while ((front - rear) > 0) {
    p[0] = q[rear++]; // [0,1,5,6,7,8]
    p[1] = q[rear++];
    for (int i = 0; i < 4; i++) {
        cell[0] = d[i * 2] + p[0];
        cell[1] = d[i * 2 + 1] + p[1];
        if (cell[0] >= 0 && cell[0] < w && cell[1] >= 0 && cell[1] < h
                && visited[cell[1]][cell[0]] == 0 && isBlack(cell[0], cell[1]) != 1) {
            if(!(front <= sizeof(front)/sizeof(int) - 5))
            {
                q = (int*)realloc(q,1.75*front);
            }
            q[front++] = cell[0];
            q[front++] = cell[1];
            visited[cell[1]][cell[0]] = visited[p[1]][p[0]] + 1;
            parent[cell[1]][cell[0]][0] = p[0];
            parent[cell[1]][cell[0]][1] = p[1];
            if (cell[0] == ePoint[0] && cell[1] == ePoint[1]) {
                found = 1;
                break;
            }
        }
    }
}
int访问[h][w];
int parent[h][w][2];//宽度,高度,{x,y}
int d[]={0,-1,0,1,1,0,-1,0};
int p[2];
int单元[2];
int*q=(int*)malloc(10000*sizeof(int));
int前=0,后=0;
q[front++]=sPoint[0];
q[front++]=sPoint[1];
已访问[sPoint[1]][sPoint[0]]=1;
而((前-后)>0){
p[0]=q[rear++];//[0,1,5,6,7,8]
p[1]=q[rear++];
对于(int i=0;i<4;i++){
单元[0]=d[i*2]+p[0];
单元[1]=d[i*2+1]+p[1];
如果(单元[0]>=0&&cell[0]=0&&cell[1]如果(!(前面有一些提示:
parent
sPoint
的大小/类型不包括在内。不要强制转换malloc。我会在
if
中使用括号(即
…如果((单元格[0]>=0)和&(单元格[0]
)。
sizeof(前面)/sizeof(int)
?为什么要比较(
unsigned
)1-5)使用
int
?。
realloc
要求的是
size\u t
,而不是十进制。数组作为数组的索引很难管理,因为从数组中请求值太容易了。我几乎不建议您一步一步地调试代码以找出错误在密码里谢谢我会的try@GökberkAçıkgöz???为什么会有一个以“1.75*front”为大小的realloc?@JoseFelipe在if中使用无用的括号(因为所有的测试都是&)只会增加阅读的难度。if很长这一事实的一部分,没有什么错。@Tom's这就是我说“我愿意…”的原因.两者都是正确的,
&&
是主要表达,但就可读性而言,我同意这个答案: