スマートポインタによって引き起こされるメモリリークを発見する「テクニック」を知っている人はいますか? 私は現在、C++で書かれた大規模なプロジェクトに取り組んでおり、参照カウントを伴うスマート ポインターを多用しています。明らかに、コードのどこかでまだ参照されているスマート ポインターによって引き起こされるメモリ リークがいくつかあるため、それらのメモリは解放されません。「不必要な」参照を含むコード行を見つけるのは非常に困難です。これにより、対応するオブジェクトが解放されなくなります (ただし、それはもはや役に立ちません)。
Web で、参照カウンターのインクリメント/デクリメント操作のコール スタックを収集することを提案するアドバイスを見つけました。これにより、どのコードが参照カウンターの増加または減少を引き起こしたのか、良いヒントが得られます。
しかし、私が必要としているのは、対応する「呼び出しスタックの増加/減少」をグループ化するある種のアルゴリズムです。これらのコール スタックのペアを削除した後、(少なくとも) 1 つの「コール スタックの増加」が残っていることを願っています。これで、リークを修正することは大したことではなくなります。
しかし、グループ化を行う「アルゴリズム」のアイデアはありますか?
開発はWindows XPで行われます。
(私が説明しようとしたことを誰かが理解してくれることを願っています...)
編集: 循環参照によるリークについて話しています。