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

