發現代碼中存在如下模式:

fopen 失敗返回 NULL,但後續仍調用 fclose(fp)。
C 標準規定:fclose(NULL) 行為未定義,絕大多數實現會直接崩潰。

FILE *fp = fopen("file.txt", "r");
if (fp == NULL) {
// 錯誤處理,直接返回或退出,絕不調用 fclose
return -1;
}
// 正常使用 fp ...
fclose(fp); // 僅在 fp 有效時調用
fread、fwrite、fprintf 等)同理,參數必須是有效 FILE*。