メモリリークはC/C++環境下におて メモリリークは特にメモリが限られている環境(例えば携帯電話など)では致命的なエラーです 以下に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); メモリリークを検出するにはデバック開始を選択しプログラムを起動します すると、プログラム終了時に出力の欄に次のように出るはずです {58}となっているのがメモリリークを起こしているメモリ番号です // CRTメモリリーク箇所検出 _CrtSetBreakAlloc(58); ここでは58としていますが、先ほどのメモリリークが発生しているメモリ番号を指定してください この時、呼び出し履歴の欄を見てください 緑の矢印が原因となっている行を指します |