Ошибка сегментации в C, поиск в ширину - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь получить доступ непосредственно к памяти в 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;
            }
        }
    }
}
...