事实证明,使用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/