メモリリークは
malloc関数で確保されたメモリがfree関数をし忘れた場合に起こります
これのまずいところは、プログラムを終了しても使われたメモリが解放されないところです
つまり、メモリ解放を忘れたプログラムを起動するたびに
使えるメモリ領域が減っていき、システムの性能が低下したり、不安定になったりします。
最悪の場合、システムを再起動する必要があります。
以下にVC++でメモリリークを検出と箇所の検出方法を示します。
#include <crtdbg.h> #include <stdio.h> #include <stdlib.h> int main(){ // CRTメモリリーク検出用 _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF); // CRTメモリリーク箇所検出 //_CrtSetBreakAlloc(58); int* a = (int*)malloc(sizeof(int) * 4); //free(a); // freeし忘れでメモリリーク発生 return 0; }
メモリリーク検出には次のヘッダーが必要です
#include <crtdbg.h>
プログラムの先頭に次のコードを挿入します
// CRTメモリリーク検出用 _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);
ちなみに、このコードでC++のnewも検出できます