2010-12-01 55 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] = TRUE;

該函數的第一個輸入值是0(v = 0),它隨之崩潰。 size = 5.正如你在代碼的末尾看到的,我試圖用相同的seg錯誤手動將visited設置爲true。當我刪除所有試圖改變訪問時,程序運行它應該如何通常沒有seg錯誤。

任何想法爲什麼這不能被修改?此外,還有更多的代碼,但我決定不提供它,除非有必要。

回答

3

代碼中有兩個不同的變量visited。裏面的if條件,visited是矢量,但這塊之外,在最後一行:

visited[v] = true; 

visited指的是在你的代碼的開頭定義的bool *visited = NULL。發生段錯誤是因爲您試圖取消引用空指針。