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

C语言hangman游戏加入文件指针后运行出现segmentation fault

故障根因

段错误由程序启动时读取历史分数的逻辑触发:

  • 首次运行程序时,ow_hangman_saved_score.data 文件不存在,fopen("ow_hangman_saved_score.data", "r") 会返回 NULL
  • 代码未对文件指针做非空校验,直接将空指针传入 fscanf 访问非法内存,直接触发段错误
修复方案

1. 修复启动读分逻辑

对读文件的指针做非空判断,无历史文件时默认初始化分数为0:

score_in_fp = fopen("ow_hangman_saved_score.data", "r");
if (score_in_fp == NULL) {
    // 首次运行无历史分数,初始值设为0
    score = 0;
} else {
    fscanf(score_in_fp, "%d", &score);
    fclose(score_in_fp);
}

2. 补充写分逻辑的异常校验(避免后续潜在崩溃)

当前写分数的逻辑也未判断fopen返回值,遇到权限不足、磁盘满等场景时也会触发段错误,建议两处写分逻辑都按以下方式修改:

score_out_fp = fopen("ow_hangman_saved_score.data", "w");
if (score_out_fp != NULL) {
    fprintf(score_out_fp, "%d", score);
    fclose(score_out_fp);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:27:03