首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C/C++ 筆記:fclose(NULL) 導致崩潰的正確處理

     編輯:關於C語言

問題現場

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

錯誤代碼片段

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

正確修正

修正後代碼

FILE *fp = fopen("file.txt", "r");
if (fp == NULL) {
    // 錯誤處理,直接返回或退出,絕不調用 fclose
    return -1;
}
// 正常使用 fp ...
fclose(fp);  // 僅在 fp 有效時調用

核心原則

  • 資源獲取即初始化(RAII 思想):成功獲取資源才進入釋放邏輯。
  • 所有文件操作函數(fread、fwrite、fprintf 等)同理,參數必須是有效 FILE*。
  • 統一錯誤出口模式可減少此類漏洞。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved