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

C语言实现求数组度功能时出现segmentation fault错误求助

问题排查与修复方案

1. 段错误触发原因

  • 你在main函数中先执行了argv++将指针偏移到第一个输入参数位置,后续循环读取参数时又使用argv[i + 1]做二次偏移,导致访问到argv数组的越界地址,触发非法内存访问报错,也就是段错误。

2. 业务逻辑错误

  • 数组的度定义是数组中元素出现的最高频次,你当前degreeOfArray函数返回的是出现频次最高的元素本身,不是它的出现次数,和预期输出要求不符。比如输入样例中频次最高的元素是2,共出现3次,原代码会返回2,正确输出应该为3。

3. 修复后完整代码

#include<stdio.h>
#include<stdlib.h>

int degreeOfArray(int arr[], int n)
{
    int max_count = -100000;
    int current_count = 0;
    for(int i = 0; i < n; i++)
    {
        current_count = 0;
        for(int j = 0; j < n; j++)
        {
            if(arr[i] == arr[j])
            {
                current_count++;
            }
        }
        if(current_count > max_count)
        {
            max_count = current_count;
        }
    }
    return max_count;
}

int main(int argc, char**argv)
{
    int n = argc - 1;
    // 无输入参数容错
    if(n <= 0) {
        printf("请输入至少一个整数参数\n");
        return 1;
    }
    int arr[n];
    for(int i = 0; i < n; i++)
    {
        // 移除多余的argv++,直接按原偏移读取参数
        arr[i] = atoi(argv[i + 1]);
    }
    printf("%d\n", degreeOfArray(arr, n));
    return 0;
}

4. 运行验证

输入样例执行命令:./编译后的程序名 4 2 4 2 2 5 6,输出结果为3,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:15:08