2017-01-03 1 views
-1

Ich versuche, eine Breitensuche Algorithmus für mein Bomberman-Spiel zu implementieren, ist es Wand 1 und Boden durch 0, dargestellt ich die Funktion FindDepth wollte, dass mir die kürzeste Entfernung von der Position A geben, zu Position B in Anbetracht der Tatsache, dass wir die Wände nicht überlappen können. Das Problem ist, dass ich im folgenden Programm einen Segmentierungsfehler erhalte.Segmentierungsfehler im Programm

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; 
} 

Dies war der vollständige Code.

+0

'if (...), wenn (...)' kann geändert werden 'if (... && ...)' –

+0

Das ist nicht der vollständige Code des Programms ist. Das ist eine Funktion. –

Antwort

5

könnte das Problem mit dieser Linie:

if(A.x + 1 < 6) 

Sie überprüfen, ob A.x + 1 < 6. Was passiert, wenn es 5? Gitter ist ein Array aus 5 Elementen, was bedeutet, ihre Indizes 0 bis 4 sind Wenn A.x + 1 ist fünf Sie außerhalb des zugewiesenen Speicher für das Array zu treten.

Hoffe, das hilft.

4

A.x + 1 < 6 sollte A.x + 1 < 5 sein. Ebenso für A.y + 1.

Verwandte Themen