0

C++ dll(アンマネージ コード)を使用する Windows Forms(C#)アプリケーションがあります。イメージが読み込まれ、それを処理するために dll 関数が呼び出されます。問題は次のとおりです。例外: std::bad_allocは、dll から関数を連続して数回呼び出すとスローされます。おそらく問題は、dll でメモリを削除していないためであり、Windows フォームのガベージ コレクションが原因である可能性があります。アプリケーション内のどのプロジェクトがメモリリークを引き起こしているかを判断する方法は?

4

1 に答える 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 に答える