2014-03-18 63 views
0

在我的項目中,我試圖製作一個鏈接列表的副本,然後顯示其內容。目前我有它的工作,但每次我嘗試退出程序崩潰。我刪除了在程序主要部分中使用的拷貝構造函數的實例,所以問題似乎來自那裏。下面是代碼:使用帶鏈接列表的複製構造函數

struct ListNode{ 
    int num; 
    struct ListNode *next; 
}; 
ListNode *head; 

List::List(const List& org){ 
    ListNode *copy=org.head; 
    ListNode *temp; 
    if(copy==NULL){ 
    head=NULL; 
    } 
    else{ 
    head=copy; 
    while(copy!=NULL){ 
     temp=new ListNode; 
     temp->num=copy->num; 
     temp=temp->next; 
     copy=copy->next; 
    } 
    } 

} 

請注意,我知道有些括號{}是一個小關程序本身的工作,直到我試圖退出,所以我不知道我怎麼會阻止該程序崩潰?

+0

不要在C++ 11中使用'或',它被定義爲'||',在C++中有一些(我忘記了名字)'<---'注意缺少11 ,一般在C++中;像':['是鍵入'{'或其他的東西,我從來沒有用過它們,但它們在那裏! –

+0

爲什麼拷貝構造函數必須處理全局變量'head'?複製構造函數必須改變'this'的狀態。 – Mahesh

+0

頭部變量是複製構造函數分開的類的一部分 – user2340686

回答

2

拿一大張紙,勾畫一個要複製的列表(假設有4個節點),然後按照必須一步一步完成的步驟。然後看看如何把它轉換成代碼。

上面的代碼創建了一堆斷開的節點,而不是一個列表。

0

新創建的列表有一個head指向複製實例的head。所以,如果你刪除這兩個列表,你會結束嘗試兩次刪除相同的內存(我假設你的析構函數確實嘗試刪除節點)。 順便說一下,創建的節點分配,但沒有引用(即你有一個內存泄漏)。您可能需要查看Coding a function to copy a linked-list in C++以獲得一些非常類似問題的答案。

相關問題