2

_CrtDumpMemoryLeaks();知らなかった場合は、プログラム内のすべてのメモリリークをダンプする関数です。私は現在、3632062バイトのメモリリークがあることを示しています(割り当てが解除されていません)。

私は疑問に思っていました:特定のバイト数が割り当てられたときにVisual C ++ Expressを壊す方法はありますか?そうすれば、3632062バイトが割り当てられたときに中断し、スタックトレースを読み取って、どこに割り当てたかを確認できます。

これは現在、メモリが割り当てられている場所を見つけるために私が考えることができる唯一の方法であり、それを修正することができます。私は自分のコードをたくさん検索してきましたが、リークがファイルに関連していることは確かですが、3632062バイトを割り当てる必要がある場所を見つけることができません(ロードするファイルは2767136バイトだけなので)。 mで動作しています。

メモリリークの原因を見つけるためのアイデアはありますか?ネイティブC++、Visual C++2010を使用しています

4

2 に答える 2

3

_CrtSetAllocHookを使用してこれを実行し、合計メモリ使用量を追跡できます。

UMDHは、すべてのヒープに割り当てられたブロックのリストを提供します。与えられた合計割り当てしきい値に達しても、すべてのブロックがどこに割り当てられたかはわからないため、これはあなたが望むものかもしれません。

于 2010-11-18T20:11:05.030 に答える
1

私は以前、この単純なメモリリーク検出器を使用して、メモリリークを見つけるのに成功しました。

于 2010-11-18T20:12:24.390 に答える