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

C语言统计链表相同level元素的计数器计数不正确是什么原因

代码问题及修复

错误点汇总

  • 存在无效内存分配与内存泄漏:你为指针p申请了堆内存后立刻将p赋值为链表头head,申请的内存地址直接丢失,既无实际作用也会造成内存泄漏,可直接删除malloc相关代码。
  • 野指针访问+值不更新:struct personInfo *per定义后未初始化就直接解引用*per=p->person,属于未定义行为,会触发程序崩溃。同时per仅在循环外赋值一次,遍历过程中不会跟随节点更新,永远只会比对链表头节点的level值。
  • 判断逻辑错误:if(per->otherLevel=level)中使用了赋值运算符=而非比较运算符==,会直接修改节点的otherLevel值,判断逻辑完全不符合预期。
  • 链表遍历逻辑错误:p = p->next写在了if判断的内部,只有匹配到level的节点才会移动指针,一旦出现不匹配的节点就会陷入死循环。

修复后代码

int countEls(ListNode *head, unsigned char level){    
    ListNode *p = head;
    int counter = 0;

    while(p != NULL){
        // 直接访问当前节点的person属性比对level
        if(p->person.otherLevel == level){  
            counter++;
        }
        // 无论是否匹配都移动到下一个节点
        p = p->next;
    }
    return counter;
}

内容的提问来源于stack exchange,提问作者raay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:54:03