メモリリーク元を追うには_CrtSetBreakAlloc()

_CrtSetBreakAllocを用いると、指定したメモリ割り当て位置にブレークポイントを設定できる。

Detected memory leaks!
Dumping objects ->
{9357} normal block at 0x04693B90, 171 bytes long.
 Data: <20101201  224300> 32 30 31 30 31 32 30 31 20 20 32 32 34 33 30 30
・・・・
{1865} normal block at 0x04664618, 171 bytes long.
 Data: <20101130  230000> 32 30 31 30 31 31 33 30 20 20 32 33 30 30 30 30
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {1658}
normal block at 0x0035DB30, 75 bytes long.
 Data: <   Y:   :       > B4 A6 B8 59 3A 00 00 00 3A 00 00 00 01 00 00 00
Object dump complete.


上のようなログが出た場合、{}に囲まれた値を指定して、
_CrtSetBreakAlloc(1865)を実行する。

この数字はメモリ確保の順番を指していて、指定番目のメモリ確保でブレーク割り込みくるってイメージ。

ブレークしたらデバックの呼出履歴から、呼び出し元を探せば犯人が分かるのだ。