您是否看到该代码段出现分段错误的原因?

时间:2014-01-21 10:07:41

标签: c++ pointers linked-list

我尝试用另一个列表的头指针初始化一个新的链表。我定义了构造函数

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

1 个答案:

答案 0 :(得分:1)

在你的构造函数中,你所做的只是复制指针:

head = aHead;

这不会为您提供包含新节点集的新列表。它只是为您提供了一个指向同一组节点的新列表。

在析构函数中,您使用重复调用remove(0)来破坏列表,而delete cur; 又会删除每个节点,如下所示:

Node

这提出了一个大问题,因为两个列表都试图删除相同的节点。要销毁的第一个列表很好,但第二个是在无效的内存位置调用delete。

解决方案是更改构造函数以实际制作节点的副本。这比听起来更复杂,因为你必须复制所有节点,而不仅仅是头部。它还依赖于你的{{1}}类也有一个复制构造函数。