私のアプリケーションには、検出されない無限に成長するメモリ リークがあるという問題があります。オブジェクトを作成し、メソッドを実行してから、オブジェクトを削除します。これを行うたびに、TaskManager のメモリ使用量が約 50 ~ 100MB 増加します。これは、いくつかの実行後に私の記憶全体を使い果たします。マルチスレッドでこれを行いますが、静的変数がないため、スレッド内の異なるオブジェクト間に衝突はありません。パラメータで渡された以外のメモリを変更しない、他のオブジェクトの静的メソッドのみを使用するため、スレッドセーフです。理由を調べようとしたこと:
- crtdbg.h (CRT-Memeory-Leak-Detection) を使用しますが、アプリケーションの開始以降に存在するリークのみがあります。それらはシャットダウン時に削除され、それほど大きくはありません。
- 継承元のすべてのオブジェクトで仮想デストラクタを探していましたが、すべて問題ありません
アプリケーションがリークしている場所を見つけるには、他に何ができますか? HEAP でリークを見つけることができず、STACK でリークを引き起こす可能性のあるデストラクタの問題以外の理由もわかりません (これは、オブジェクトがローカルの std::string オブジェクトを破棄しないことを意味します)。ヒープにスペースが割り当てられています)。「STACK-Leaks」の他の理由があるかどうかはわかりませんが、メモリが最も大きくなるメソッドの部分では、HEAP 割り当てがないことはわかっています。