You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

删除链表中不存在的节点引发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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:45:03