2014-03-18 65 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++以获得一些非常类似问题的答案。

相关问题