2014-01-21 22 views
-5

我嘗試用另一個列表的頭指針初始化一個新的鏈表。我定義構造函數爲你是否看到任何分段故障的原因超出該代碼段?

template <typename dataType> 
List<dataType>::List(Node* aHead){ 
    size = 0; 
    head = aHead; 
    for(Node* cur = head; cur != NULL; cur = cur->next){ 
     size++; 
    } 
} 

即使它構造了列表,它表示在執行結束時的分段錯誤。如果你想分享更多的幫助,你可以看看whole code

這是主要的功能

6 4 5 
List size : 3 
6 4 5 
Segmentation fault 
+0

如果您從鏈接中查看主要功能,您會看到aHead被定義爲另一個列表的頭指針。 – erogol

回答

1

的電流輸出在你的構造函數,你正在做的是讓指針的副本:

head = aHead; 

這不給你帶有一組新節點的新列表。它只是給你一個新的列表,指向同一組節點

在你的析構函數,你摧毀使用重複調用remove(0)名單,這反過來又刪除的每個節點,就像這樣:

delete cur; 

這提出了一個大問題,因爲這兩個列表嘗試刪除相同的節點。要銷燬的第一個列表沒有問題,但第二個列表是在無效的內存位置調用delete。

解決方法是更改​​您的構造函數以實際製作節點的副本。這比聽起來更復雜,因爲你必須複製節點的全部,而不僅僅是頭部。它也依賴於你的Node類有複製構造函數。

+0

指向同一組節點是我的意圖,所以在這個術語中它的工作是正確的。問題是我上面指出的分段錯誤。我不想有一個複製構造函數。 – erogol

+1

如果這兩個列表指向同一組節點,那麼**會在某處出現問題。這可能是也可能不是導致你當前的段錯誤的原因,但是除非你修復它,否則它肯定會導致一個錯誤。 –

+0

givan aHead是一個指向新創建列表的指針,但其類未定義爲List。我嘗試通過將其頭部ptr設置爲aHead來與List類擁抱它。所以最後只有一個列表類 – erogol