C++ dll(アンマネージ コード)を使用する Windows Forms(C#)アプリケーションがあります。イメージが読み込まれ、それを処理するために dll 関数が呼び出されます。問題は次のとおりです。例外: std::bad_allocは、dll から関数を連続して数回呼び出すとスローされます。おそらく問題は、dll でメモリを削除していないためであり、Windows フォームのガベージ コレクションが原因である可能性があります。アプリケーション内のどのプロジェクトがメモリリークを引き起こしているかを判断する方法は?
1 に答える
1
私は最近同様の問題に遭遇し、問題に対する有用な解決策を設計しています。~ *関数とは異なる "freeObject" などの名前の deconstruct 関数を作成できます。明示的に "freeObject" 関数を呼び出す必要があります。ここに例があります。
void VideoAbstraction::freeObject(){
videoCapture.~VideoCapture();
videoWriter.~VideoWriter();
backgroundImage.release();
currentStartIndex.release();
currentEndIndex.release();
mog.~BackgroundSubtractorMOG2();
gFrame.release();
gForegroundMask.release();
gBackgroundImg.release();
currentMask.release();
vector<ObjectCube>().swap(partToCompound);
vector<Mat>().swap(compoundResult);
vector<Mat>().swap(indexs);
vector<Mat>().swap(indexe);
vector<int>().swap(frame_start);
vector<int>().swap(frame_end);
}
呼び出し部分はそのようなものです。
void UserVideoAbstraction::UserfreeObject(){
userVB->freeObject();
}
于 2014-08-15T08:46:02.423 に答える