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

   在大量试用动态内存分配时很容易发生错误,譬如:DAMAGE: after Normal block (#) at 0x....错误分析_第1张图片,

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

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

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

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

你可能感兴趣的:(测试,delete,编译器)