DAMAGE: after Normal block (#) at 0x....错误分析

来源:互联网 发布:网络弹棉花是什么意思 编辑:程序博客网 时间:2024/05/16 23:47

   在大量试用动态内存分配时很容易发生错误,譬如:,

发现这个问题时,我很郁闷,因为这个bug不是经常出现的!经过大量的数据去测试,才发现这样的问题,根据不断的重复调试,最后定位到delete;new和delete的代码行很简单;就一行代码,问题出现在这里,应该就是内存操作出现问题.

  在我的程序里大量试用了new来进行动态分配内存,经过代码排除法,最好定位到的代码行时memcpy()这个函数里!设断点调试,发现复制到内存空间的字节数比分配的空间要大,但编译器不会提示错误,而且运行起来不释放内存的话程序也没问题,一调用delete释放内存空间就会出现上面的Debug Error;

   造成上面Debug Error的原因是: delete释放的内存空间比new的空间要大,破坏了其他正常的数据,造成内存溢出;而导致这个的根本原因是内存越界操作:需要复制的内存空间比分配的内存空间要大!

   解决方法: 增加分配的内存空间.

原创粉丝点击