我有Windows Forms(C#)应用程序,它使用C ++ DLL(非托管代码)。加载图像,然后调用dll函数来处理它。 问题是:异常:当我连续几次从dll调用函数时抛出std :: bad_alloc 。 可能问题是因为没有删除dll中的内存,而可能是因为Windows窗体中的垃圾收集器。 如何确定应用程序中的哪个项目导致内存泄漏?
答案 0 :(得分:1)
我最近遇到了类似的问题,我为这个问题设计了一个有用的解决方案。你可以编写一个名为" freeObject"的解构函数。 ,与〜 * 函数不同,你应该明确地调用" 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();
}