Hackerrank学生分数求和C语言代码在Dev C++运行崩溃求助
代码崩溃原因排查
- 核心崩溃原因:循环终止条件逻辑完全错误。你使用
while(marks != NULL)作为循环结束判断,malloc返回的数组首地址本身就是非空有效指针,你每次对指针执行+2偏移,指针永远不会等于NULL,导致循环无限执行,持续访问数组边界之外的非法内存,触发内存访问越界的段错误,就是你报错行result += (*marks);的直接诱因。 - 逻辑错误1:switch分支漏写break语句。当传入gender为'b'时,执行完case 'b'的代码后不会跳出switch结构,会直接落入case 'g'的分支继续执行,最终求和结果完全不符合预期。
- 逻辑错误2:完全未使用传入的
number_of_students参数,无法正确控制遍历的数组边界,遍历逻辑完全失控。
修复方案
直接采用下标遍历数组更安全,避免指针操作的越界风险,也规避了switch分支漏写break的问题,修复后的函数代码如下:
int marks_summation(int* marks, int number_of_students, char gender) { int result = 0; // 男生从下标0开始取,女生从下标1开始取,步长都是2 int start_idx = gender == 'b' ? 0 : 1; for (int i = start_idx; i < number_of_students; i += 2) { result += marks[i]; } return result; }
内容的提问来源于stack exchange,提问作者Snowable
相关产品推荐
相关产品推荐

