C++でメモリリークを自動的に検出する方法はありますか?私はちょうど作成や削除を追跡するためにNEWやDELETEのようなマクロを使うことができるテンプレートソリューションを探しています。それは、Mac、Linux、およびWindows上で動作する必要があります。C++でメモリリークを自動的に検出するにはどうしたらよいですか?
0
A
答えて
3
多くのツールがあります。例えば、dmallocのような特別なライブラリはlibfenceのようなライブラリです。特にLinuxではValgrindが非常に便利です。
だから、おそらくあなたはいくつかのmallocデバッグライブラリのソースコードを入手し、それをあなたのすべての開発に使用するのが最良の "賭"です。
2
LinuxおよびMac OSXではvalgrind、WindowsではMicrosoft Application Verifierを実行することをお勧めします。どちらのツールも無料です。
コードで実行したい場合は、マップ内の割り当てを追跡できます。プログラム出口では、地図が空であるかどうかを確認するだけです。マクロを使用する場合は、割り当てレコードとともにソース行とファイルをマップに格納できます。私はしかし、ツールを使用すると、より簡単であると信じています。彼らは新しい/削除を追跡するだけでなく、コードを変更する必要もなく、あなたを助けることができます。
1
ValgridはLinux上で動作します。& Mac。 Windowsの場合はVisual Leak detectorを試してみてください。
関連する問題
- 1. XSDスキーマファイルをXMLファイルで自動的に検出するにはどうすればよいですか?
- 2. Cでメモリリークを検出しました
- 3. Javaでのメモリリークの自動検出
- 4. C#コンソールアプリケーションが自動的に閉じないようにするにはどうすればよいですか?
- 5. DefaultMessageListenerContainerが自動的に起動しないようにするにはどうすればよいですか?
- 6. アプリケーションからJProfilerで起動したことを検出するにはどうすればよいですか?
- 7. Emacsで自動的に開いたウィンドウを閉じるにはどうしたらいいですか?
- 8. 私は自分のWebポータルでどのようにメモリリークを検出しますか?
- 9. 新しく検出されたファイルをインポートするためにjavascriptファイルを自動的に更新するにはどうすればよいですか?
- 10. Javascriptで炎を検出するにはどうしたらいいですか?
- 11. 動的に描画されたグラフィックのクリックを検出するにはどうすればよいですか?
- 12. C++でランタイムエラーを検出するにはどうすればよいですか?
- 13. MySQLでスリーププロセスを自動的に終了するにはどうしたらいいですか?
- 14. EditTextでテキストを自動的にクリアするにはどうしたらいいですか?
- 15. Greasemonkeyでテキストを自動的に変更するにはどうしたらいいですか?
- 16. backbone-js:新しいコレクションを自動的に初期化するにはどうしたらいいですか?
- 17. RDPを自動的に転送して使用するにはどうしたらいいですか?
- 18. サブスクリプションが自動的にキャンセルされるかどうかを検出する
- 19. XMLソースコメントをテキスト文書に自動的にエクスポートするにはどうしたらいいですか?
- 20. メモリリークを修正するにはどうしたらいいですか?
- 21. QMediaPlayerを自動破壊するにはどうしたらいいですか?
- 22. セレン運転htmlunitでイメージを自動的にダウンロードさせるにはどうしたらいいですか?
- 23. ユーザーの場所を自動的に検索するにはどうすればよいですか?
- 24. web2pyがHTMLエンティティを自動的にエンコードするのを防ぐにはどうしたらいいですか?
- 25. デバイスを自動的にアンマウントしてデバイスの電源を切るにはどうしたらいいですか?
- 26. Objective-c:ダブルタップを検出するにはどうすればよいですか?
- 27. 自動テストレポーターログのテキストファイルバージョンを自動的に作成/保存するにはどうすればよいですか
- 28. ユーザーのバックアップを自動的に作成するにはどうしたらいいですか?
- 29. javucript - ステップ定義ファイルを自動的に生成するにはどうしたらいいですか?
- 30. Rubyテストを自動的に実行するにはどうしたらいいですか?
診断情報を収集したり、メモリリークを追跡するために、 'new'と' delete'を置き換えることを検討するかもしれません。グッドリード:[なぜ、デフォルトの新規および削除演算子を置き換えるのですか?](http://stackoverflow.com/questions/7149461/why-should-one-replace-default-new-and-delete-operators)&[ISO C++標準に準拠したカスタムの新規および削除演算子の作成方法は?](http://stackoverflow.com/questions/7194127) /how-should-i-write-iso-c-standard-conformant-custom-new-and-delete-operators/).Noteこれは実際に自動的な方法ではありません。 –
実現するべきことは、それらをポータブルな方法で検出する必要がないことです。コード自体が移植性がある場合は、あるプラットフォームでそれらを検出する(およびそれらを押しつぶす)と、他のプラットフォームも同様に削除する必要があります。 –
@MatthieuM .:残念ながら、バグはコンパイラ/プラットフォーム固有のことがよくあります。 –