2

Visual Studio 2010を使用していますが、メモリリーク用にVCが提供するCRTライブラリを使用してみました。しかし、コンソールでメモリリークのプリントアウトを確認できません。コードベース:

#include <iostream>
#include <vector>

#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#ifdef _DEBUG
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
#endif

using namespace std;

int main( )   
{
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
int Y = 1;
int X = 2;
int** superevil = new int*[Y];
for(int i = 0; i < Y; ++i)
    superevil[i] = new int[X];

superevil[0][2] = 1;

/*for(int i = 0; i < Y; ++i)
  delete[] superevil[i];
delete[] superevil;*/

 _CrtDumpMemoryLeaks();
return 0;
}

理由がわからない。

4

1 に答える 1

4

_CRTDBG_LEAK_CHECK_DFを設定した場合_CrtDumpMemoryLeaks()は、プログラムの最後に自動的に呼び出されるため、呼び出す必要もありません。実際、あなたが電話した場所では_CrtDumpMemoryLeaks()、まだ漏れは発生していませんでした。

また、これはIDEを介して実行されるデバッグビルドでのみ機能し、出力(存在する場合)はコンソールではなくVisualStudioの[出力]ウィンドウにダンプされます。

IDEの呼び出しを削除して_CrtDumpMemoryLeaks()実行すると、次のようなものが表示されます(VS2012を使用しました)。

検出されたメモリリーク!
オブジェクトのダンプ->
c:\ consoleapplication1.cpp(24):{190}通常のブロック(0x004CCAF0、長さ8バイト)。
データ:<> CD CD CD CD CD CD CD CD
c:\ consoleapplication1.cpp(22):{189}通常のブロック(0x004CCAB0、長さ4バイト)。
データ:<L> F0 CA4C00
オブジェクトのダンプが完了しました。

于 2013-03-27T06:56:26.730 に答える