您的位置:首页 > 其它

今天调试出两个内存泄露

2011-12-01 20:29 295 查看
内存泄露真是无处不在,使用windows API 不当也会引起内存泄露,new 的内存,delete完并不是真的就保险了。
今天调试程序,就发现了两处内存泄露,在PC上有的问题运行时会提示,但wince系统下这方面做的就不够,现在把两个错误写下来。

1.我在程序中读取MP3的专辑图片,需要预先把一块内容读出,然后再把图片数据分离出来,原理如下

BYTE *pData = new BYTE[dwSize]; //包含头信息,图片数据

//作出判断,这时 pData经过几次 pData++ 已经不再指向new的那块内存初始地址

delete[] pData; //这时出现内存泄露 pData已经变化了

如果这段代码多次使用,就会严重泄露

2.CreateDIBSection() windows API函数 ,这个函数会让系统为位图分配内存,它的第四个参数是一个双指针

如果在使用时如下就会出现内存泄露

BYTE *pBitData = new BYTE[dwSize]; //自己动态分配的内存

HBITMAP hbmp = CreateDIBSection(hDC, &bi, DIB_RGB_COLORS, (void**)&pBitData, NULL, 0); //系统要分配一块内存,这时pBitData指向系统分配的那块内存

///

delete[] pBitData; //这时删除的只是系统分配的那块,自己动态分配的就没有删除

如果代码多次执行就会出现严重泄露

上边泄露,编译执行程序刚开始发现不了,但程序执行一段时间,重复执行泄露代码,程序就会崩溃!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: