使用.NET的C ++ DLL:内存泄漏是否确定?

时间:2013-08-23 09:00:44

标签: c++ dll memory-leaks

我有Windows Forms(C#)应用程序,它使用C ++ DLL(非托管代码)。加载图像,然后调用dll函数来处理它。 问题是:异常:当我连续几次从dll调用函数时抛出std :: bad_alloc 可能问题是因为没有删除dll中的内存,而可能是因为Windows窗体中的垃圾收集器。 如何确定应用程序中的哪个项目导致内存泄漏?

1 个答案:

答案 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();
}