2017-01-03 7 views
-1

私はボンバーマンタイプのゲームのために幅優先探索アルゴリズムを実装しようとしています。壁は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; 
} 

これは完全なコードです。

+0

if(...)if(...) 'if(... && ...) 'に変更可能 –

+0

これはプログラムの完全なコードではありません。それは一つの関数です。 –

答えて

5

問題は、この行を次のようになります。あなたがチェックしている

if(A.x + 1 < 6) 

場合A.x + 1 < 6.どのようなことが5ですか? gridは、5つの要素からなる配列です。つまり、インデックスは0から4までです。A.x + 1が5の場合、配列の割り当てられたメモリの外側に足を踏み入れています。

これが役に立ちます。

4

A.x + 1 < 6は、A.x + 1 < 5である必要があります。 A.y + 1の場合も同様です。

関連する問題