我在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/