很多人在使用cvCloneImage时习惯采用下面的方式,
例如:
IplImage *dst = cvCreateImage(xxx);
dst = cvCloneImage(src);
事实上,这么做是错误的。因为
cvCloneImage
会重新开辟一段内存,然后对src
中的数据进行复制。如果cvCloneImage用在循环中,就会造成内存溢出,程序崩溃,例如:
IplImage *dst = cvCreateImage(xxx);
while(1){
dst = cvCloneImage(src);}
正确的做法是,在使用函数前不开辟内存,例如:
IplImage *dst = NULL;
dst = cvCloneImage(src);
用在循环里则需要每一次循环都内存释放,例如:
IplImage *dst = NULL;
while(1){
dst = cvCloneImage(src);
cvReleaseImage(&dst);}
这样做就解决了cvCloneImage
内存泄露的问题了。