我在cvDilate函数中调用了cvCreateStructuringElementEx()函数(返回IplConvKernel *)。

如果按如下所示调用cvDilate,如何防止内存泄漏?

#include <iostream>
#include <cv.h>
#include <highgui.h>
using namespace std;

int main()
{
  IplImage* topHatImg = cvLoadImage("ff.jpg",0);
  for (size_t i = 0; i < 1000000; i++)
  {
    //memory leak due to repeated call to cvCreateStructuringElementEx()
    //how can I prevent this
    cvDilate(topHatImg, topHatImg,
             cvCreateStructuringElementEx(21, 3, 11, 2, CV_SHAPE_RECT,NULL ));
  }
}

最佳答案

按照注释中的建议进行操作,或者在循环外创建IplConvKernel结构:

IplImage* topHatImg = cvLoadImage("ff.jpg",0);
IplConvKernel* convKernel = cvCreateStructuringElementEx(21, 3, 11, 2, CV_SHAPE_RECT,NULL );
for (size_t i = 0; i < 1000000; i++)
{
  cvDilate(topHatImg, topHatImg,convKernel);
}
// deallocate stuff here
cvReleaseStructuringElement(&convKernel);
cvReleaseImage(&topHatImg);
// ...

我建议您切换到OpenCV C++ API。

关于c - 如何防止代码中的内存泄漏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24824866/

10-11 20:52