我正在尝试为未排序的列表创建一个复制构造函数。以下是我的代码:
UnsortedType::UnsortedType(const UnsortedType &s)
{
length = s.length;
if (s.listData == NULL)
{
listData = NULL;
return;
}
listData = new NodeType;
NodeType *temp1 = listData, *temp2 = s.listData;
while (temp2 != NULL)
{
temp1->info = temp2->info;
temp2 = temp2->next;
temp1->next = new NodeType;
temp1 = temp1->next;
}
temp1 = NULL;
}
我不知道为什么但是最后一个节点没有设置为NULL。这在调用析构函数时会导致问题。析构函数删除节点,直到找到一个设置为NULL的节点。由于没有节点设置为NULL,因此它会一直删除,直到遇到运行时错误。任何帮助将不胜感激。
答案 0 :(得分:0)
问题是如果temp2在语句中为null:
temp2 = temp2->next;
然后你不必为
分配内存temp1->next = new NodeType;
然后在语句结束时将temp1设置为NULL:
temp1 = NULL;
理想的代码应该是:
while (1)
{
temp1->info = temp2->info;
temp2 = temp2->next;
if (temp2 != NULL) //Where temp2 is copyable
{
temp1->next = new NodeType;
temp1 = temp1->next;
}
else
{
temp1->next = NULL;
break;
}
}
答案 1 :(得分:-1)
您将temp1
设为NULL
;那只是一个局部变量。这是一件无用的事情。
我不清楚您的数据结构是如何工作的,但可能您想将最后temp1->next
设置为NULL
。