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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:09:01