メモリリークとは、動的に割当てたメモリ領域を解放し忘れることで次第にメモリ資源を食い潰していき、いずれプログラムやシステムに異常をきたすという問題。
c言語のメモリ解放はmalloc()やfree()が使われてきた。
malloc()で割当てて、free()で解放する。
メモリの解放を忘れていると、プログラムが終了するまでメモリ資源を無駄に占有し続ける。
#include <stdio.h> #include <stdlib.h> #include <memory.h> int maikFile(char *fileName, int size){ FILE *fp; char *pData; // メモリ解放 pData = malloc(size); if(pData == NULL){ return 1; } fp = fopen(fileName, "wb"); if(fp == NULL){ return 1; } memset(pData, 0x20, size); fwrite(pData, size, 1, fp); fclose(fp); free(pData); return 0; } int main(int argc, char** argv[]){ return 0; }
ファイルシステムオープンの失敗を繰り返すと、メモリは解放されずにreturn1となるのでメモリリークになる。