链表复制版本溢出

overflow in copied version of linked list

本文关键字:溢出 版本 复制 链表      更新时间:2023-10-16

我有一个链表类。它包括一个复制构造函数:

LinkedListStorage(const LinkedListStorage &other) :root(NULL)
{
    size = other.size;
    count = other.count;
    node *cur = other.root;
    node *end = NULL;
    while(cur->next != NULL)
    {
        node* x = new node;
        x->word = cur->word;
        if(!root)
        {
            root = x;
            end = root;
        }
        else
        {
            end->next = x;
            end = x;
        }
        cur = cur->next;
    }
}

班里我运行它通过一个方法写链表文件,然而同时表示方法适用于原始列表,列表的复制版本导致访问冲突,逐页浏览列表最后一个进入的是复制指向0 x00000000正如预期的那样,然而当它到达为最后一个节点最终编写函数的指针指向0 xcdcdcdcd,没有试图复制之间的代码运行,并且使用write函数,所以它一定是复制构造函数,但是我不能为我的生命弄清楚哪里出错了。

提前感谢您的帮助!

在没有看到类的其余部分的情况下很难说,但也许您需要初始化x->next,即

node* x = new node;
x->word = cur->word;
x->next = NULL;

我认为问题是你没有复制最后一个元素。变化:

while(cur->next != NULL)

while(cur != NULL)

您在end中存储指向列表中最后一个条目的指针,但是当迭代列表时,您检查->next != NULL,您似乎没有在end上设置。我不确定这就是导致你目前问题的原因,但它似乎是错误的。:)

编辑:由于您还将列表的长度存储在count中,因此您有三个冗余信息:

  1. end
  2. ->next == NULL
  3. count如果你真的需要它们,你必须小心保持它们同步。