删除链表中不存在的节点引发segmentation fault问题求助
问题原因
- 段错误的核心诱因是
while循环的条件判断顺序错误:你将curr->key != k放在curr != NULL之前执行,C++的逻辑与&&遵循短路求值规则,当遍历到链表末尾curr为NULL时,会先尝试访问空指针的key成员,触发非法内存访问直接崩溃,根本无法执行到后续的curr == NULL判断逻辑。
修复方案
仅需要调整while循环的两个判断条件顺序,先校验指针非空再访问成员即可:
void Node::Del(int k) { Node *curr = head; Node *temp = NULL; // 调整判断顺序:先判断curr非空,再访问key成员 while (curr != NULL && curr->key != k) { temp = curr; curr = curr->next; } if (curr == NULL) { return; } if (curr == head) { head = curr->next; delete curr; return; } // 走到此处curr一定非空且key匹配,可省略冗余判断直接执行删除 temp->next = curr->next; delete curr; }
修改后当遍历到链表末尾找不到对应key时,curr != NULL判断不成立会直接退出循环,触发curr == NULL分支返回,不会再出现空指针访问问题。
内容的提问来源于stack exchange,提问作者TK001
相关产品推荐
相关产品推荐

