在我的项目中,我试图制作它,以便我可以制作链表的副本,然后显示其内容。目前我有它的工作,但每次我尝试退出程序崩溃。我删除了程序主要部分中使用的复制构造函数的实例,所以问题似乎来自那里。这是代码:
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 :(得分:2)
拿一张大纸,勾勒出要复制的列表(让我们说4个节点),然后按照必须一步一步的步骤进行操作。然后看看如何将其转换为代码。
上面的代码创建了一堆断开连接的节点,而不是列表。
答案 1 :(得分:0)
新创建的列表中有一个head
,指向复制的实例head
。因此,如果删除这两个列表,您最终会尝试删除相同的内存两次(我假设您的析构函数尝试删除节点)。
顺便说一句,创建的节点是分配的,但没有被引用(即你有内存泄漏)。您可能需要查看Coding a function to copy a linked-list in C++以获得一个非常相似的问题的答案。