释放内存失败

    这两天一直在写2.3微秒匹配的程序,今天碰到了一个问题,是内存释放失败的问题。

   首先这个问题是在使图片缩小0.8倍的函数中出现的,运行出现的问题就是:“windows已在..exe中触发一个断点,其原因可能是堆被破坏或他所加的DLL中有bug”。在用函数写第一幅图片的时候就成功了,第二次再调用的时候就不行了,一步步的跟踪,跟踪到了delete [] imagebuf;这句上面,好奇怪,内存不能释放。

    经过搜索一阵之后发现,有这样几种情况,<1> 函数中把指针的地址给更改了,不能正确释放; <2> new和delete,new[]和delete[] 是配对的,不能混用; <3> 对指针进行了越界写操作;我的情况就是第三种,好隐蔽的错误,但是为什么会出现这种错误呢,原来我在申请新图片的内存空间的时候,比如说原来图片是15*15的,经过缩小0.8倍后,要变成12*12的,按照常理来说,新图片肯定要申请12*12的内存空间,即是:new BYTE[12*12];但是,不是这种情况的,在BMP存储的时候,采用了一种“对齐”的机制,每一行像素数据的长度若不是4的倍数,则填充一些数据使它是4的倍数。这样一来,一个17*15的24位BMP大小就应该是834字节(每行17个像素,有51字节,补充为52字节,乘以15得到像素数据总长度780,再加上文件开始的54字节,得到834字节)。就是这种情况出现的这种错误,如果我用BmpWidth*i+j进行像素操作的时候,出来的效果完全不是想要的样子,但是不出现内存泄露的问题,接着我尝试用LineByte*i+j的方法来试,图片效果完全正确,但是会出现内存泄漏的问题。

    好吧,既然知道症结在哪了,就知道如何改了,把新申请的内存空间改成new BYTE[12*15],宽度依然是15,高度是12的,在高度上是不存在问题的。F5按下,效果出来,无任何不适,整个世界清静了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值