0

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

4

1 回答 1

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();
}
于 2014-08-15T08:46:02.423 回答