【问题标题】:Do you see any reason for segmentation fault out of that code segment? [closed]您是否看到该代码段中出现分段错误的任何原因? [关闭]
【发布时间】:2014-01-21 10:07:41
【问题描述】:

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

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

【问题讨论】:

  • 如果您从链接中查看 main 函数,您会看到 aHead 被定义为另一个列表的头指针。

标签: c++ pointers linked-list


【解决方案1】:

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

head = aHead;

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

在您的析构函数中,您通过重复调用remove(0) 来销毁列表,这反过来又会删除每个节点,如下所示:

delete cur;

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

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

【讨论】:

  • 指向同一组节点是我的意图,所以在这个术语中它可以正常工作。问题是我上面指出的分段错误。我不想有一个复制构造函数。
  • 如果两个列表指向同一组节点,您在某个地方遇到问题。它可能是也可能不是导致您当前的段错误的原因,但它肯定会最终导致一个,除非您修复它。
  • givan aHead 是一个指向新创建列表的指针,但其类未定义为列表。我尝试通过将其头部 ptr 设置为 aHead 来将其与 List 类一起使用。所以最后只有一个列表类
猜你喜欢
  • 2014-08-29
  • 2021-04-09
  • 1970-01-01
  • 2019-10-23
  • 2021-07-30
  • 1970-01-01
  • 2014-10-30
  • 2021-11-14
  • 1970-01-01
相关资源
最近更新 更多