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

C语言单词长度直方图实现出现段错误,求排查原因

问题排查与修复方案

你的代码出现段错误或输出异常,是由多个明确的代码错误导致的,下面逐一分析并给出修复方法:

1. 初始化函数的参数类型错误与拼写失误

  • 错误点:
    • 函数定义void initialize(int **a, unsigned int len)使用二级指针,但传入的数组名会退化为一级指针int*,类型不匹配;且函数内*(a + counter) = 0是给指针赋值0,而非给数组元素置0。
    • main函数中调用初始化函数时拼写错误:intialize应为initialize。
  • 修复:
    修改initialize函数参数为一级指针,同时修正拼写:
    void initialize(int *a, unsigned int len)
    {
        int counter = 0;
        while(counter < len)
        {
            a[counter] = 0; // 用数组下标更易读
            counter++;
        }
    }
    
    main中修正调用:initialize(frequency_array, array_size(inp_str));

2. 单词分割的索引跳转错误

  • 错误点:ncounter = ncounter + ecounter + 2;中+2完全错误,单词结束后仅需跳过1个空格(如果存在),加2会跳过过多字符,导致后续单词无法处理,甚至触发数组越界。
  • 修复:
    改为判断式跳转,避免越界:
    // 更新ncounter前判断是否已到字符串末尾
    if (*(inp_str + ncounter + ecounter) != '\0') {
        ncounter += ecounter + 1;
    } else {
        ncounter += ecounter;
    }
    

3. 单词统计的循环条件错误

  • 错误点:while (ncounter <= real_length)会在ncounter等于字符串长度时,统计一个长度为0的空单词(此时ecounter为0),导致frequency_array[0]莫名自增,还可能触发越界访问。
  • 修复:
    改为while (ncounter < real_length),确保只处理字符串内的有效字符。

4. 输出逻辑的严重缺陷

  • 错误点:putchar(*(frequency_array + ncounter) + '0')仅能输出0-9的数字,当单词出现次数超过9时会输出乱码;且连续输出5000个数字可读性极差,大部分都是无意义的0。
  • 修复:
    改为按实际统计值输出,用printf打印清晰格式:
    ncounter = 0;
    // 只输出到最大可能的单词长度(BUFFER_SIZE)即可
    while (ncounter <= BUFFER_SIZE)
    {
        if (frequency_array[ncounter] > 0) {
            printf("长度为%d的单词出现%d次\n", ncounter, frequency_array[ncounter]);
        }
        ncounter++;
    }
    

5. 输入函数的边界处理漏洞

  • 错误点:input_str未处理getchar()返回EOF的情况(比如用户按下Ctrl+D),会导致死循环。
  • 修复:
    在循环内增加EOF判断:
    inpchar = getchar();
    if(inpchar == EOF || inpchar == '\n' || inpchar == delimeter)
    {
        *(str+incvar) = '\0';
         return;
    }
    

额外优化建议

  • array_size宏设为5000过于冗余,输入字符串最大长度是1024,数组大小设为BUFFER_SIZE + 1即可,避免内存浪费。
  • 可以用标准库函数strlen替代自定义的lenstr,用strtok简化单词分割逻辑,若要保留自定义函数也可正常使用。

修复后的代码可正常统计单词长度直方图,不会出现段错误或输出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:20:33