链接列表深层复制构造函数

时间:2016-10-29 15:49:59

标签: 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);

我做错了什么?

2 个答案:

答案 0 :(得分:2)

Node* prev = header;

我猜想那里的标题不会被初始化,因此导致prev->接下来是一个随机指针(很可能是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;
    }
}

答案 1 :(得分:0)

为什么你从下一个开始而不是标题。 节点* prev =标题;标题定义在哪里?你已经分配了所需的内存吗?而是从标题开始并复制。

<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div class="col-sm-2">
  <i class="fa fa-pencil" aria-hidden="true"></i>
  <input type="email" class="form-control" id="phone" placeholder="Enter Phone" readonly="readonly">
</div>

这样您就可以复制所有节点而不会跳过标题。希望这是有道理的。 此外,您获得的实际异常可能会提供关于哪些访问是NPE的线索。