我正在实现一个链表类'复制构造函数,它将进行深层复制。这是我的代码:
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);
我做错了什么?
答案 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的线索。