最近项目使用OpenCV,debug时发现使用IplImage导入图像时,即使cvReleaseImage也会有内存泄漏。
查资料,有的说使用CvvImage,即可解决内存泄漏问题。实际试了一下,内存泄漏是一样的。怀疑是vfptr没有释放。再找解决方案,发现有人说:有两个方法可以消除memory leak的错误,一个是用 use mfc as static library的编译选项。另外一种方法,将cxcored.lib highguid.lib改成cxcore.lib和highgui.lib以后,编译运行,也是没有问题的。其中,在VC6.0中,在project->Setting中并未找到use mfc as static library选项。但是在project->Setting->General中,可以选择Use MFC in a Static Libary,然后再重新编译,即无内存泄漏。两种导入图像方式如下1 IplImage *pimg = NULL; CvvImage newCvvImage; newCvvImage.Load("D:\\1.bmp",3); pimg =newCvvImage.GetImage(); newCvvImage.Destroy();2.IplImage *pimg = NULL; pimg = cvLoadImage("D:\\1.bmp",3); cvReleaseImage(&pimg); pimg = NULL;两个lib库的区别:
运行VS 2005的生成命令后生成库文件,debug模式下生成:cxcored.lib和cxcore100d.dll,release模式下生成cxcore100.dll和cxcore.lib(可以看到debug文件比release文件多了一个字母d)。