C++单链表复制构造函数分段错误

C++ Singly Linked List Copy Constructor Segmentation Fault

我正在尝试创建单向链表的深拷贝构造函数 class。它复制新列表的头部并将元素追加到它的末尾(通过调用追加)函数。

完整代码可在此处获得:https://onlinegdb.com/Hke0ev8bG

谁能指出我哪里出错了?非常感谢!

class LinkedList 
{
    class Node
    {
    public:
        int *data;
        Node *next;
        Node() {
            data = NULL;
            next = NULL;
        }
        Node(int *d) {
            data = d;
            next = NULL;
        }
    };

private:
    Node *head;
    int itemCount;

public:
    LinkedList() {
        head = NULL;
        itemCount = 0;
}

//COPY CONSTRUCTOR
LinkedList(LinkedList &copy) 
{
    Node *temp = copy.head;
    while (temp != NULL)
    {
         append(temp->data);
         temp = temp->next;
    }
}

//ADD TO THE END OF A LIST
void append(int *d) {
    Node *tail = new Node;

    tail->data = d;
    tail->next = NULL;

    if (head == NULL) {
        head = tail;
    }
    else {
        Node *temp = new Node;
        temp = head;

        while (temp->next != NULL) {
            temp = temp->next;
        }

        temp->next = tail;
    }
    itemCount++;
}

问题是程序在复制构造函数部分遇到了"Segmentation fault"。

您忘记在复制构造函数中初始化 LinkedList::headLinkedList::itemCount。在常规构造函数中进行的初始化仅在实际使用常规构造函数时才适用。

因此,LinkedList::append 在检查 head 指针时发现随机垃圾,假设它是有效的,然后在使用该无效指针时导致段错误。