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

C语言链表作为函数参数传递问题:平均身高计算失败排查

问题排查:链表平均身高计算函数调用失败

问题描述

C程序实现了存储患者信息的链表功能,main函数内计算患者平均身高的逻辑正常,但调用外部avr_height函数时执行失败,怀疑是指针理解或链表传递方式有误。

错误原因定位

avr_height函数的核心错误是指针类型不匹配导致的非法内存访问:

  • 函数参数InpList是LIST_HEAD*类型(指向链表头结构体的指针),但代码中直接将其赋值给NODE*类型的pTemp,这会让指针指向错误的内存区域,遍历链表时触发非法访问。
  • 正确逻辑应该是从InpList->pFirst_elmt获取链表的第一个节点指针,再开始遍历。

修正后的avr_height函数代码

void avr_height(LIST_HEAD *InpList)
{
    int iNumb = 0;
    int iSum = 0;
    int iCurrent = 0;
    float fAvrageH = 0;

    NODE *pTemp = NULL;
    // 修正:从链表头结构体中获取第一个节点的指针
    pTemp = InpList->pFirst_elmt;

    while(pTemp != NULL)
    {
        iCurrent = pTemp->Patient.iHeight;
        iSum = iSum + iCurrent;
        pTemp = pTemp->next;
        iNumb++;
    }

    // 新增空链表判断,避免除以0的运行时错误
    if(iNumb == 0){
        printf("No patients in the database, cannot calculate average height.\n");
        return;
    }

    fAvrageH = ((float)iSum) / ((float)iNumb);
    // 统一输出格式,保留两位小数
    printf("The average height of these patients is: %.2f\n", fAvrageH);
}

额外优化说明

  • 增加空链表判断逻辑,避免数据库无患者时出现除以0的运行时错误。
  • 调整输出格式为%.2f,和main函数内的输出保持一致,提升结果可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:18:19