iOS上的openCV cvRetrieveFrame或cvReleaseCapture内存泄漏

时间:2012-04-22 20:05:24

标签: ios opencv

我在这段代码中遇到内存泄漏,我无法找到我做错的事。

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。

4 个答案:

答案 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指针。