作者:小涵竹叶 | 来源:互联网 | 2023-10-12 18:43
环境:opencv2.4.2+VS2008C++环境+XP使用示例如下:IplImage*imgcvCreateImage(width,height,IPL_DEPTH_8U
环境:opencv2.4.2+ VS2008C++环境 + XP
使用示例如下:
IplImage * img = cvCreateImage(width,height,IPL_DEPTH_8U,1);
在程序结束代码,没有相应的示例代码,预期泄露情况如下:
大块图像: (width * 通道数 + 3 )/4*4 * height
图像结构体泄露: IplImage 总共占用112字节,泄露 112字节 。
实际泄露情况是:
大块图像: (width * 通道数 + 3 )/4*4 * height + 20 字节 。
图像结构体泄露: 112 + 20 字节 。
请问:这俩个 20字节 是哪方面导致的内存泄露?
已经确认,任意改变 宽度和高度,通道数,都会多出20字节。
例如,一副 640*480,单通道8位图像,以及 640*480,三通道8位图像,程序退出时俩幅图像内存泄露如下:
Detected memory leaks!
Dumping objects ->
{921} normal block at 0x06AFC268, 307220 bytes long.
Data: < h > CD CD CD CD 68 C2 AF 06 00 00 00 00 00 00 00 00
{920} normal block at 0x0650A888, 132 bytes long.
Data: < P p > CD CD CD CD 88 A8 50 06 70 00 00 00 00 00 00 00
{917} normal block at 0x01EF0040, 921620 bytes long.
Data: < @ > CD CD CD CD CD CD CD CD CD CD CD CD 40 00 EF 01
{916} normal block at 0x0650A708, 132 bytes long.
Data: < P p > CD CD CD CD 08 A7 50 06 70 00 00 00 00 00 00 00
Object dump complete.
7 个解决方案
opencv2.0版本以下通常结束都要手动cvReleaseImage,否则会内存泄露的
百度了下大概明白字节对齐的意思,具体这里为什么加20字节不是很明白,能解说一下么?
请问你这Detected memory leaks!
Dumping objects ->
{921} normal block at 0x06AFC268, 307220 bytes long.
Data: < h > CD CD CD CD 68 C2 AF 06 00 00 00 00 00 00 00 00
{920} normal block at 0x0650A888, 132 bytes long.
Data: < P p > CD CD CD CD 88 A8 50 06 70 00 00 00 00 00 00 00
{917} normal block at 0x01EF0040, 921620 bytes long.
Data: < @ > CD CD CD CD CD CD CD CD CD CD CD CD 40 00 EF 01
{916} normal block at 0x0650A708, 132 bytes long.
Data: < P p > CD CD CD CD 08 A7 50 06 70 00 00 00 00 00 00 00
Object dump complete.
用啥实现的