DAMAGE: after Normal block (#) at 0x....错误分析
2011-09-08 14:41
351 查看
在大量试用动态内存分配时很容易发生错误,譬如:
,
发现这个问题时,我很郁闷,因为这个bug不是经常出现的!经过大量的数据去测试,才发现这样的问题,根据不断的重复调试,最后定位到delete;new和delete的代码行很简单;就一行代码,问题出现在这里,应该就是内存操作出现问题.
在我的程序里大量试用了new来进行动态分配内存,经过代码排除法,最好定位到的代码行时memcpy()这个函数里!设断点调试,发现复制到内存空间的字节数比分配的空间要大,但编译器不会提示错误,而且运行起来不释放内存的话程序也没问题,一调用delete释放内存空间就会出现上面的Debug Error;
造成上面Debug Error的原因是: delete释放的内存空间比new的空间要大,破坏了其他正常的数据,造成内存溢出;而导致这个的根本原因是内存越界操作:需要复制的内存空间比分配的内存空间要大!
解决方法: 增加分配的内存空间.
,
发现这个问题时,我很郁闷,因为这个bug不是经常出现的!经过大量的数据去测试,才发现这样的问题,根据不断的重复调试,最后定位到delete;new和delete的代码行很简单;就一行代码,问题出现在这里,应该就是内存操作出现问题.
在我的程序里大量试用了new来进行动态分配内存,经过代码排除法,最好定位到的代码行时memcpy()这个函数里!设断点调试,发现复制到内存空间的字节数比分配的空间要大,但编译器不会提示错误,而且运行起来不释放内存的话程序也没问题,一调用delete释放内存空间就会出现上面的Debug Error;
造成上面Debug Error的原因是: delete释放的内存空间比new的空间要大,破坏了其他正常的数据,造成内存溢出;而导致这个的根本原因是内存越界操作:需要复制的内存空间比分配的内存空间要大!
解决方法: 增加分配的内存空间.
相关文章推荐
- Debug Error DAMAGE:after normal block(#XXXX)at 0xXXXXXXXX
- 运行时刻错误:DAMAGE: After normal block
- after Normal block(#47) at 0x001D3908 错误的一次解决经历
- 关于 DAMAGE:after Normal block(#47) at 0x00000000问题的解决
- error: heap corruption detected:after normal block(#xxx) at 0x xxxxxxxx
- 遇到C++ error: heap corruption detected:after normal block(#xxx) at 0x xxxxxxxx怎么处理
- DAMAGE:after Normal Block(#63) at 0x00382ca8
- C++ error: heap corruption detected:after normal block(#xxx) at 0x xxxxxxxx
- 错误使用 itoa函数 引发HEAP CORRUPTION DETECTED :after Normal block 错误
- DAMAGE:after Normal block
- HEAP CORRUPTION DETECTED :after Normal block 错误
- Damage :after normal block:
- 关于DAMAGE: after Normal block的问题 【from http://blog.sina.com.cn/s/blog_a4864fde01014962.html】
- vc++中debug error: Damage before/after normal block
- 关于“Damage:before normal block..."(内存的使用错误)
- Keil 出现Debug Error! DAMAGE:after Normal block
- [转载]关于DAMAGE: after Normal block的问题
- DAMAGE:After normal block(#****)
- 关于DAMAGE: after Normal block的问题
- DAMAGE:after Normal block问题