3

CRTメモリリーク検出を使用しようとしていますが、MicrosoftVisualStudioで次のメッセージが表示され続けます。「メモリリークが検出されました-オブジェクトダンプをスキップします。」私はそれを実際に実行してオブジェクトダンプを取得することはできません。

運が悪かったので、メモリリーク検出に関するMicrosoftの記事(http://msdn.microsoft.com/en-us/library/e5ewb1h3(VS.80).aspx )の指示に従いました。

私のstdafx.hには(プロジェクト全体を再構築しました):

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

私のアプリケーションのエントリポイントには、次のものがあります。

_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

また、ファイル名と行番号がMicrosoftがアドバタイズした形式で表示されることを期待しています。

Detected memory leaks!
Dumping objects ->
C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18} 
normal block at 0x00780E80, 64 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

私はオブジェクトダンプを取得することさえできませんでしたが、他の人がこれらの線に沿って何かを見ていると言っていることに気づきました(_CRTDBG_MAP_ALLOCが定義されていても):

Detected memory leaks!
Dumping objects ->
{18} normal block at 0x00780E80, 64 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

new演算子とdelete演算子のオーバーライドに時間をかけたくないので、CRTデバッグが役立つことを期待していました。これがうまくいかない場合は、new演算子とdelete演算子をオーバーライドしてしまう可能性がありますが、実際には、ファイル名と行番号(指を交差させる)を使用して割り当て情報を取得したいと思います。

ありがとう、キリル

4

3 に答える 3

2

_CrtDumpMemoryLeaksアプローチを使用して、ファイル名/行番号のないリークされたオブジェクトの大きなダンプを取得した後、Visual Leak Detectorを使用しました。VLD は宣伝どおり (無料) に機能し、私はそれにとても満足しています。

于 2011-03-22T00:45:14.713 に答える
1

ファイル名と行が出力される理由は、パスするnewマクロを使用して割り当てが行われたためです。タッチしたくない場合は、 CRTにパスせ__FILE__ず、印刷できません。ここには大きな魔法はありません。__LINE__.new__FILE____LINE__

于 2009-01-08T11:52:50.967 に答える
1

私のマシンにはありませんが、MSVC をインストールするときに、C ランタイム ライブラリ (つまり、MSVCRTxx.xxx) のソース コード (ほとんど) をインストールするオプションがあります。そのソース コードで「オブジェクト ダンプのスキップ」を調べると、オブジェクト ダンプがスキップされている理由がわかる場合があります。

于 2009-01-08T00:26:06.347 に答える