_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)を実行する。
この数字はメモリ確保の順番を指していて、指定番目のメモリ確保でブレーク割り込みくるってイメージ。
ブレークしたらデバックの呼出履歴から、呼び出し元を探せば犯人が分かるのだ。