关于DAMAGE: after Normal block的问题 【from http://blog.sina.com.cn/s/blog_a4864fde01014962.html】
2013-09-30 16:46
309 查看
前几天师弟调试程序的时候出现了这样一个错误,出错的位置是在delete [] 一个动态分配的数组时出现的。
经过调查发现错误是因为他之前在给数组赋值的时候越界了1个位置。
也就是double * a= new double [5],结果赋值的时候给a[5]=5。使用c++的同学都知道,一个5维的动态数组,调用时应该是0~4,但是这里给a[5]赋值并没有出错,反而是delete时才会出错。
这其实是因为在动态分配内存的时候往往分配的是一个连续的地址,这一点从可以使用*[a+3]来取值就能够知道。
因此,在动态分配的时候,会在数组界限外加一个用来标识数组范围的标志,例如a数组,就会在a[-1]和a[5]有两个标志,如果我们在这两个位置赋值,赋值和调用时并不会出错,而是在delete [] a时出错,错误的名称就是“DAMAGE: before Normal block”和“DAMAGE: after Normal block”。一般是后者居多。
因此,当你遇见这个错误的时候,记得去检查一下自己数组的赋值吧。
经过调查发现错误是因为他之前在给数组赋值的时候越界了1个位置。
也就是double * a= new double [5],结果赋值的时候给a[5]=5。使用c++的同学都知道,一个5维的动态数组,调用时应该是0~4,但是这里给a[5]赋值并没有出错,反而是delete时才会出错。
这其实是因为在动态分配内存的时候往往分配的是一个连续的地址,这一点从可以使用*[a+3]来取值就能够知道。
因此,在动态分配的时候,会在数组界限外加一个用来标识数组范围的标志,例如a数组,就会在a[-1]和a[5]有两个标志,如果我们在这两个位置赋值,赋值和调用时并不会出错,而是在delete [] a时出错,错误的名称就是“DAMAGE: before Normal block”和“DAMAGE: after Normal block”。一般是后者居多。
因此,当你遇见这个错误的时候,记得去检查一下自己数组的赋值吧。
相关文章推荐
- include和merge标记的作用主要是为了解决layout的重用问题。[轉 from:http://blog.sina.com.cn/s/blog_67d95f400100zk3d.html]
- 关于Unicode字符集(http://blog.sina.com.cn/s/blog_4b4409c30100vw9t.html)
- ASP.Net设计时需要考虑的性能优化问题 转载自http://blog.sina.com.cn/s/blog_3d7bed650100055p.html
- Java Scoket网络编程,转自commandingofficer的博客(http://blog.sina.com.cn/s/blog_616e189f0100s3px.html)
- http://blog.sina.com.cn/s/articlelist_1973273451_0_1.html
- opencv的一个神经网络例程(转自http://blog.sina.com.cn/s/blog_61e10f020101bv94.html)
- http://blog.sina.com.cn/s/blog_8820018a0100w7t7.html
- 移动时代的信息需求(原文链接http://blog.sina.com.cn/s/blog_593af2a70101ac1k.html)
- IplImage 和 QImage的转换 (转:http://blog.sina.com.cn/s/blog_5c70dfc80100qzif.html)
- http://blog.sina.com.cn/s/articlelist_1973273451_0_1.html
- http://blog.sina.com.cn/s/blog_61d8dfdb0100fti3.html
- http://blog.sina.com.cn/s/blog_705cc5dd01012ehb.html
- C++对象的内存分布和虚函数表 http://blog.sina.com.cn/s/blog_60e96a410100lirk.html
- iOS UIAppearance使用详解(来自http://blog.sina.com.cn/s/blog_9693f61a0101f1rs.html)
- 谁抽干了股市(http://blog.sina.com.cn/s/blog_4cc2179501015jt5.html)
- STC89C52单片机串口调试(http://blog.sina.com.cn/s/blog_7cae472801015idp.html)
- 降低印花税以后股市会如何?(http://blog.sina.com.cn/s/blog_4cc2179501015lgj.html)
- http://blog.sina.com.cn/s/articlelist_1587621077_0_1.html
- fedora17 安装(64bit)转载自http://blog.sina.com.cn/s/blog_88e0154d01019rxr.html
- opencv的一个神经网络例程(转)(转自http://blog.sina.com.cn/s/blog_61e10f020101bv94.html)