2013-04-11 50 views
0

我正在嘗試編寫一個函數,該函數用一個由鄰接列表表示的圖進行一些計算,但是我得到了一個我只是沒有得到的分段錯誤錯誤。 基本上我首先「移除」一個節點,然後重新插入一次。 這裏是我的代碼:adjecency list函數中的分段錯誤錯誤

int AdjList::bruteForce (node** list) { 
    int pointerIndex; 
    node* help; 
    node* help2; 

    for (int i=0; i<boundary; i++) { 
     huidigScore = 0; 
     help2 = list[i]; 
     help = help2; 
     help2 = help2->next; 
     while (help2->next != NULL) { 
      help->next = help2->next; 
      help2->next = NULL; 
      pointerIndex = help2->number; 

      help2->next = help->next; 
      help->next = help2; 
      help2 = help2->next; 

     } 
    } 
} 

和列表初始化:

node** list; 
node* help; 
node* help2; 
list = new node*[boundary]; 
for (int i=0; i<boundary; i++) { 
    list[i] = new node; 
    help = list[i]; 
    help->next = NULL; 
    help->number = 0; 
} 

在此先感謝。

+0

一個最小的完整例子會很好。 – Beta 2013-04-11 16:49:13

回答

2

在您初始化幫助 - >未來總是被設置爲空,當談到從而

help2 = help2->next; 
while (help2->next != NULL) { 

幫助2爲NULL,並嘗試訪問help2->接下來在while循環導致段錯誤。
編輯
同樣的事情發生在for循環的最後一次迭代時,當我等於邊界1時,help2將保存指向列表中最後一個值的指針,其中help2-> next爲NULL,並且所有內容都將由先前描述的場景。通過我在這裏再次猜測列表中最後一個條目的下一個設置爲NULL。

+0

那麼,初始化後我加載了一些值,所以我不認爲這是問題。如果我只是使用help-> next兩次或三次,它不會給我任何錯誤,但如果我使用while循環,它會... – user2180680 2013-04-12 10:43:06

+0

然後提供初始化代碼可能會有所幫助。或者更好的例子來說明如何重現問題。沒有辦法猜測代碼中哪些人無法訪問哪裏出錯。 – alexrider 2013-04-12 11:21:01

+0

我發現了錯誤,你說得對。我添加了一個if語句來檢查help2-> next是否可行,現在編譯。謝謝。 – user2180680 2013-04-12 13:20:13