我在这段代码中遇到内存泄漏,我无法找到我做错的事。
CvCapture* capture = cvCaptureFromFile([[url path] UTF8String]);
while (cvGrabFrame(capture)) {
IplImage *frame = cvRetrieveFrame(capture);
if (frame) {
[...]
} else {
break;
}
}
cvReleaseCapture(&capture);
如果我删除cvRetrieveFrame,内存泄漏就会消失。如果我用一个cvQueryFrame更改cvGrabFrame和cvRetrieveFrame,则会发生相同的行为。
启用或注释掉cvReleaseCapture的行为相同。所以它可能与此有关,但我无法弄清楚是什么。
我在iOS上使用openCV r7286。
答案 0 :(得分:2)
这是openCV中的一个错误。最新的主干中有一个修复程序。
答案 1 :(得分:1)
做这样的事情怎么样?
IplImage *frame;
while (cvGrabFrame(capture))
{
frame = cvRetrieveFrame(capture);
if (frame) { [...] }
else { break; }
}
只声明一个指针,而不是很多
答案 2 :(得分:0)
cvRetrieveFrame没有做一些非常复杂的事情。我想你在代码的这一部分泄漏了记忆:
if (frame) {
[...]
}
你有多确定那部分没有泄漏记忆?小心分享那一点?
答案 3 :(得分:0)
在循环时将IplImage *框架声明一次。或者在每次迭代后释放分配的Frame指针。