2010-12-01 28 views
0

私はグラフ用の学校プロジェクトで作業しています。ここでは、ツリーの深さを最初に検索しています。segフォールトを引き起こすベクトル値を変更する

void wdigraph::depth_first(int v) const { 
    static int firstv = -1; 
    static bool *visited = NULL; 

    if (firstv == -1) { 
      firstv = v; 
      vector<bool> visited(size); 
      for (int i = 0; i < size; i++) { 
        visited[i] = false; 
        cout << visited[i] << endl; 
      } 
    } 
    cout << label[v]; 
    visited[v] = true; 

// [0] =真訪問;

関数の最初の入力値は0(v = 0)で、それとクラッシュします。 size = 5。コードの最後でわかるように、同じsegフォルトでvisitedをtrueに手動で設定しようとしました。訪問者を変更しようとするすべての試行を取り除くと、プログラムは通常どのようにセグメントがないかを実行します。

これは変更できない理由がありますか?また、より多くのコードがありますが、必要がない限り提供しないことに決めました。

答えて

3

コードにvisitedという2つの異なる変数があります。 if条件内では、visitedはベクトルですが、このブロックの外側で、最後の行に:

visited[v] = true; 

visitedあなたのコードの先頭で定義されたbool *visited = NULLを指します。セグメンテーションは、ヌルポインタを逆参照しようとしているために発生します。

関連する問題