2012-01-03 21 views
3

のファンクションを使用していますが、ドキュメントにはtrueまたはfalseを返すだけでなく、いくつかの情報も表示されることが約束されています。を使用して_CrtDumpMemoryLeaksを使用してコンソールにデータを表示

私が使用してみました:

_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG); 

が、何もここで画面上に私のコードの一部を表示されます。

#define _CRTDBG_MAP_ALLOC 
#include <stdlib.h> 
#include <crtdbg.h> 
#include <stdio.h> 
#include <string.h> 

int main() { 
slist* students = 0; 
clist* courses = 0; 
char c; 
char buf[100]; 
int id, num; 

malloc(100); 
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG); 


printf("there is memmory leaks?: %d\n",_CrtDumpMemoryLeaks()); 
system("pause"); 

return 0; 
} 

出力はメモリリークに関するデータがない... 理由は何ですか?道による

は、出力を続行する任意のキーをmemmory漏洩?:1 押してあり

です。 。 。

+0

と組み合わせると、デバッガでこれを実行していますか? – user7116

+0

また、_CrtSetDbgFlagを呼び出す必要はありませんか? – David

+0

はい。私がブレークポイントをトグルして行ごとに実行すると結果は同じです – Yosefki

答えて

1

Visual Studio 2010のデバッグインスタンスでこれを実行している場合は、デバッグ出力(デバッグ - >ウィンドウ - >出力)を調べる必要があります。

また、あなただけではなく、エラーのレポートモードを設定する必要があります、(メモリリークが報告される場所です)but also for warnings:あなたのプログラムのために私に次のような出力を提示

_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG); 
/* Alternatively: 
* _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); 
* _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); 
*/ 

Detected memory leaks! 
Dumping objects -> 
dump.c(14) : {86} normal block at 0x00834E50, 100 bytes long. 
Data: <    > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
Object dump complete. 
there is memmory leaks?: 1 
4

私は、あなたがダウンして、特定のメソッド/関数への漏洩を隔離開始し、特にとして、最も有用であることが、次のコードを発見した:

// declare memory stare variable 
_CrtMemState state; 

... 

// create a checkpoint to for current memory state 
_CrtMemCheckpoint(&state); 

... do stuff ... 

// report differences 
_CrtMemDumpAllObjectsSince(&state); 

このルーチンは、チェックポイント以降のすべての割り当てをダンプします。 ITは起動時や終了時などに関数呼び出しをラップすることができ、DllMainプロセスのattach/detachのDLLでも使用しています。また

便利_CrtSetReportMode_CrtSetReportFileなど

関連する問題