【C言語】
fclose()を忘れて
デバッグ関数で
メモリリークした事例

warning: leak of FILE ‘fp’
[CWE-775]

警告: fopenしたらfcloseしないとメモリリークする
[-Wanalyzer-file-leak]


■fcloseを忘れてメモリリークした事例

#include <stdio.h>
#include <string.h>
void DEBUG_log(char *str){
    FILE *fp = fopen("DEBUG.log","a");
    fprintf(fp,"%s",str);
    //fclose(fp);   忘れた!
}
int main(void){
    for(int i = 0; i<100;i++){
        char log[256];
        sprintf(log,"%s:%d id=%d\n",
            __func__,__LINE__,i);
        DEBUG_log(log);
    }
}

単体試験の時は見かけ上問題もなく動作していたのが、

結合試験などで
何度もfopen()を実行して
fclose()していないので
リソース不足でシステム異常を起こし
問題が発覚する場合があります。


参考:CWE-775