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
相关产品推荐
相关产品推荐

