5

DEBUGモードでメモリリークをチェックしたい。私は Windows を使用しており、この作業を行うために_CrtDumpMemoryLeaks関数を使用しています。

では、なぜこのコードでメモリ リークが検出されるのでしょうか。

#include <Windows.h>
#include <iostream>

int main()
{
    if(_CrtDumpMemoryLeaks() == TRUE)
        std::cerr << "MEMORY LEAK!" << std::endl;

    return 0;
}

編集:

このコードを追加して、出力をコンソールに直接出力します。

_CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );
_CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDOUT );
_CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE );
_CrtSetReportFile( _CRT_ERROR, _CRTDBG_FILE_STDOUT );
_CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE );
_CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDOUT );

出力は次のとおりです。

ここに画像の説明を入力

4

1 に答える 1

0

を含めました<crtdbg.h>か?

デバッグモードで実行していますか?

非デバッグ モード - への呼び出しは_CrtDumpMemoryLeaks()プリプロセッサによって削除され、if(TRUE)

編集: また、メモリ リークを検出するには、malloc と free のデバッグ バージョンを使用するために以下の行を追加する必要があります。こちらを参照してください。これらを追加してみていただけますか?

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
于 2012-07-02T11:57:12.967 に答える