C++vector変数等によるメモリリーク問題の解決方法

1317 ワード

以前はオーディオの特徴抽出のバッチ処理プログラムをしていたが、メモリ漏れの問題がよく発生し、Visual Leak Detector(VLD)ツールで検出し、いくつかの問題を検出し、解決した後も問題があった.その後、引き続き調査を続けました.私のコードの中で、大量のオーディオ関連処理のデータがvector変数に保存されているので、vector変数の分析問題ではないかと推測し、インターネットでいくつかの資料を調べて、解決過程を書きました.
1、Visual Leak Detectorの構成と使用について
主に他のネット上の経験を参考にしています.主な過程は:
1. View | Other Window | Property Manager
2. Go to "VC++ Directories"settings
3. Set include folder path
4. Set lib folder path
OKをクリックして、私たちは設定しました.
検査:
次の図では、memory leakを故意に作成し、debug+runを作成し、プログラムの実行が完了するとVisual Studio 2010のOutputウィンドウにメモリ漏洩の情報を出力します.
PS:忘れないで、マルチプロジェクトのMFCソリューション、vld.h最下層のstdafxに置く.hの中の最後はOK~
また、プログラムが完全に実行され、終了すると、メモリ漏洩の原因と具体的な位置提示情報が表示されることに注意してください.
最後に、私のプロジェクトでは確かにいくつかの問題が検出されたが、変更後、大量のデータ処理を実行すると、メモリの漏洩によるクラッシュが発生し、大量のデータが格納されたVector変数に目を向けた.
2、vector変数等の解析処理
言うまでもなく、具体的にはclear()だけではvectorに占有された空間を空けることができないようで、具体的な解決方法は、直接コードをつけます.
vector files;//        
files.clear();
vector(files).swap(files);

stringにも同様の問題があり、大量のデータの場合、string変数にもいくつかの処理が行われています.
string word;
word.clear();
string(word).swap(word);

変更後、4 Gメモリのパソコンで1万件のオーディオの特徴抽出プログラムを処理すると、プログラムがクラッシュする問題はありません.