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

多线程平均值计算函数结果异常,求问题排查与解决

问题分析与修复

核心问题点

  • 遗漏数组首元素:代码中循环起始为i=1l(疑似笔误,1l是long类型的1,此处应为1),直接跳过了数组list的第一个元素list[0](对应测试用例中的54),导致总和少了该值。
  • 循环范围不完整:测试用例元素总数为8,count=8,循环条件i<count仅遍历i=1到i=7共7个元素,正确应遍历全部8个元素(索引0到7)。
  • 变量未初始化:double sum;未赋予初始值0.0,属于未定义行为,可能导致计算结果随机异常。
  • 冗余类型转换:(double)(sum / count)中sum已是double类型,sum/count会自动提升为double,强制转换无必要。

修复后的代码

void *calculate_average(void *param)
{
    int count = *(int *)param;
    int i;
    double sum = 0.0; // 初始化sum为0

    average = 0.0;

    // 从索引0开始遍历所有count个元素
    for (i = 0; i < count; i++)
        sum += list[i];
    
    average = sum / count; // 直接计算平均值
    pthread_exit(0);
}

验证说明

修复后,测试用例的总和为54+15+25+45+60+93+68+57=417,平均值417/8=52.125,与正确结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:35:24