OpenCV 0.9.7 linux版本cvQueryFrame函数内存泄露

发现自己写的程序存在内存泄露,
我写代码的时候很细心的,怎么还有内存泄露?
查了一通也没有查出原因。

然后试了一下从摄像头读取视频,没有泄露;
从文件读视频,有泄露。
那么,这应该不是我的问题。
写了一个简单的测试程序,确定了是度视频文件时候,cvQueryFrame存在内存泄露。

我用的是OpenCV 0.9.5 (beta5),已经发布很长时间了,
Yahoo! OpenCV group上输入 “cvQueryFrame memory leak”一查,果然有答案。

只要简单修改一下源代码则可:
文件otherlibs/highgui/cvcap.cpp中的函数:
icvGrabFrameAVI_FFMPEG(…..)
在函数结束处的return valid;语句之前添加一行释放内存代码则可,如下:

 the_end:
    av_free_packet(pkt); //请添加这一行,释放内存
    return valid;
}

重新编译安装OpenCV,问题得以解决。

CVS中的OpenCV这个问题早已经解决。


Update:
不过,这样改了后,读取视频文件的最后一帧,好像有问题,
反正到了最后的时候,程序报segment error,
不管了。

OpenCV 0.9.7 linux版本cvQueryFrame函数内存泄露》有4个想法

  1. ssl

    段错误?是不是最后opencv后来又使用了本来已经释放的内存。

  2. gege

    请教,opencv 中的sample应该怎么调试啊,用的beta5.0,里面也没有说明, 像看看sample 参考几个detection的用法和效果,或者,能告诉我,应该去哪察看相关信息,谢谢了!

发表回复