c++ - 链表深拷贝构造函数

标签 c++ c++11 linked-list

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

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;

我猜测那里的 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;
    }
}

关于c++ - 链表深拷贝构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40320856/

相关文章:

c++ - 用于测试路径查找算法的可能数据集

c++ - std::istream 提取运算符( double 或 float )在 VS 2012 中非常慢

c++ - 内存地址会改变吗?如何动态找到它们?

c++ - std::condition_variable 和 std::condition_variable_any 有什么区别?

c++ - 唯一指针: LValue Reference vs RValue Reference function calls

c++ - Ubuntu 14.04上编译openCV程序错误

c++ - 并行RNG中的错误

c - 将列表添加到 C 中已有的列表中

c++ - 为节点分配指针地址

c - C中节点交换位置