我正在实现一个链表类的副本构造函数,该副本构造函数将进行深层复制。这是我的代码:

List( const List & rhs ) {
        Node* rhsFront = rhs.header->next;
        Node* prev = header;
        while (rhsFront) {
            prev->next = new Node(rhsFront->data, nullptr);
            rhsFront = rhsFront->next;
            prev = prev->next;
        }
}


但是,它在此行崩溃:

prev->next = new Node(rhsFront->data, nullptr);


我做错了什么?

最佳答案

Node* prev = header;


我猜那里的头文件没有初始化,因此导致prev-> next是一个随机指针(最有可能是0),并试图写入该点使程序崩溃。如果是这样,这可能会起作用。

List( const List & rhs ) {
    Node* rhsFront = rhs.header->next;
    header = new Node(rhs.header->data, nullptr);
    Node* prev = header;
    while (rhsFront) {
        prev->next = new Node(rhsFront->data, nullptr);
        rhsFront = rhsFront->next;
        prev = prev->next;
    }
}

10-01 12:13