c++ - cvCaptureFromCAM 中存在内存泄漏吗?

标签 c++ debugging video memory-leaks opencv

事实证明,使用cvCaptureFromCAM在初始化时创建了一个内存。使用 cvCaptureFromCAM 会造成 NSAutoreleasePool 对象的 48 字节内存泄漏。我最初以为我的程序有错误,但是当替换为更简单的程序时,内存泄漏仍然发生。

例如:

#include <opencv2/opencv.hpp>
int main()
{
   IplImage *frame = 0;
   CvCapture *capture = cvCaptureFromCAM (-1); //leak occurs on this line  
   //using 0 instead of -1 creates a leak too

   cvNamedWindow ("Output", CV_WINDOW_AUTOSIZE);

   while (1)
   {
      frame = cvQueryFrame (capture);
      cvShowImage ("Output", frame);
   }

   cvDestroyAllWindows ();
   cvReleaseCapture (&capture);

   return 0;
}

我正在使用 Xcode Leaks 来查找内存泄漏,并且显然我在 Mac OS X 10.6 上使用 Xcode IDE。有谁知道泄漏的解决方案吗?是我做错了什么还是 OpenCV 中的错误或者我的计算机有问题?我仔细检查了我的代码和 OpenCV 代码,但找不到真正的问题。内存泄漏是一次性的事情 - 它不会继续累积。然而,我不愿意在我的程序中留下任何漏洞。有没有人有什么建议?

最佳答案

我认为问题出在这部分

while (1)
{
   frame = cvQueryFrame (capture);
   cvShowImage ("Output", frame);
}

在我看来,你必须将这个无限的 WHILE 更改为 FOR 和 必须固定内存大小,之后必须使用

Release();
 or 
EndQuery();

我这样做的方法是这样的

 while (1)
 {
  for(int i=0;i<x;++i)
  {
      frame = cvQueryFrame (capture);
      cvShowImage ("Output", frame);
  }
  Release();
  EndQuery();
 }

关于c++ - cvCaptureFromCAM 中存在内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8116037/

相关文章:

C++ (海合会) : undefined reference to `Stack<int>::Stack(int)'

python - Kivy不加载ff_mpeg

visual-studio-2008 - 无法再在 Visual Studio 2008 中调试 ActiveX 控件

php - 为什么我的 Netbeans Xdebug session 在一段时间不活动后超时

android - 隐藏视频但继续播放

html - 为什么带有非常大的 h.264 编码 mp4(带有 +faststart,即开头的元数据)的 HTML5 视频需要很长时间才能加载?

c++ - 用 C++ 存储大矩阵 (Armadillo)

C++ << 在队列模板中重载

c++ - 你能在函数中声明一个常量对象吗?

c++ - 从非调试构建模块追踪崩溃的源代码行