私は、Visual 2017を使用してMFCアプリケーションを書いているアプリケーションを終了するには、デバッグモードでは、私はこれを取得する場合:検出メモリリークが
検出されたメモリリークを!ダンプするオブジェクト - > {74}通常ブロック 0x00000230E49A7000、16バイトです。データ:< 0 0> 30 00 97 E4 30 02 00 00 00 00 00 00 00 00 00オブジェクトのダンプ完了。 CWinApp :: InitInstanceの()内
#define _CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h>
をそして、これらの行::
ので、漏れの原因となっている機能を知るために、私はSTDAFX.Hに次の行を追加しました
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
_CrtSetBreakAlloc(74);
しかし、動作しませんでした。コードが実行される前に74番目のメモリ割り当て番号が作成されていると思われます。どんな方法で最初に呼び出すことができますか?
いつも74ですか? – drescherjm
はい、それは常に74です。私はメモリリークが私のプロジェクトにインポートされた非MFCコードで起こっていることを知りました。しかし、私は_CrtSetDbgFlagがこのコードが実行される前に呼び出されていないと思います。 –
私はこれらの行を外部コードのメインクラスのコンストラクタに入れ、デバッガは(ヒープ上ではなく)スタックにstd :: vectorを割り当てるときに停止します。非常に奇妙な... –