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

