我尝试用另一个列表的头指针初始化一个新的链表。我定义了构造函数
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 :(得分:1)
在你的构造函数中,你所做的只是复制指针:
head = aHead;
这不会为您提供包含新节点集的新列表。它只是为您提供了一个指向同一组节点的新列表。
在析构函数中,您使用重复调用remove(0)
来破坏列表,而delete cur;
又会删除每个节点,如下所示:
Node
这提出了一个大问题,因为两个列表都试图删除相同的节点。要销毁的第一个列表很好,但第二个是在无效的内存位置调用delete。
解决方案是更改构造函数以实际制作节点的副本。这比听起来更复杂,因为你必须复制所有节点,而不仅仅是头部。它还依赖于你的{{1}}类也有一个复制构造函数。