我正在使用OpenCV 2.2,我想知道是否必须释放我为图像分配的内存(如果图像被返回)。我有几次从主程序调用的method1(见下文)。它返回在方法内创建的IplImage。 我在哪里必须发布方法中创建的图像?如果我在返回命令之前释放它,我猜是什么都不会返回?返回命令后,将不会处理它。那么如何摆脱程序运行期间创建的所有dst图像???
IplImage* Method1(IplImage* src) {
IplImage *dst = cvCreateImage(cvSize(src->width, src->height), IPL_DEPTH_8U, 1);
[...]
return dst;
}
THX!
编辑: 所以我应该这样称呼这个方法:
IplImage* tmp;
tmp = cvCreateImage(cvSize(dst->width, dst->height), IPL_DEPTH_8U, 1);
tmp = Method1(src);
或
IplImage* tmp;
tmp = Method1(src);
之后在主程序中正确释放内存?
答案 0 :(得分:3)
IplImage*
,请使用cv::Mat
,它会自动为您执行内存管理。答案 1 :(得分:2)
不,否则你会返回指向一些释放内存的指针。只需确保名称Method1
表示您要返回应在稍后发布的新图片。
你必须在外面的地方释放它(一旦你完成它)。
答案 2 :(得分:1)
您可以在功能中分配内存。使用dst后在调用函数中返回图像后,可以调用cvReleaseImage(& dst)来清除内存
答案 3 :(得分:0)
通过在此功能之外创建dst
图像 来删除内存泄漏:
void Method1(IplImage* src, IplImage* &dst) {
[...]
}
IplImage* image0 = ...;
IplImage* image1 = cvCreateImage(cvSize(image0->width, image0->height), IPL_DEPTH_8U, 1);
Method1(image0, image1);
不要忘记之后在两张图片上使用cvReleaseImage(&...)
。