DAMAGE:After normal block(#****)

最近在调试程序的时候,遇到这样一个错误:damage:after normal block(#286) at 0x003865D8.当时想了半天没有想明白,明明分配空间了,有地址的,为什么删除时报错呢?
代码如下:
 PSubTree *SPSTree =new PSubTree[cn];//定义子后缀子树
         for(k=0;k<=cn;++k)        。。。。。。。。。。。(1)
//  for(k=0;k<cn;++k)  。。。。。。。。。。(2)
  {
           SPSTree[k].branch =NULL;
           SPSTree[k].base_count[0] = PSTree[k].base_count [0];
           SPSTree[k].base_count[1] = PSTree[k].base_count [1];
  }
         .......
        

        delete []SPSTree;//运行到此处时报错
到网上去搜了下,发现是个内存溢出的问题。理解了之后,这个错误的意思也就显而易见了:正常的内存块之后有破坏,也就是你写过头了,占了别人的地盘,造成了破坏。反观上面的代码,使用(1)那句代码,k=cn的时候还在写,肯定越界了,造成了后面数据的破坏。屏蔽句(1)使用句(2),删除成功。

以下的是别人的总结,觉得写的挺好的,当初就是看了这个帖子才找到那段错误代码的,O(∩_∩)O~
       

错误源头一,数组访问越界:
  大家先看如下一段程序:
  
   int* a = new int[5];
   a[5] = 3; // 这儿访问越界了
   delete[] a;
  在delete[] a;这句代码处将会出现:DAMAGE:After normal block(#93)的错误。
  
  错误源头二:
  
  
  char* pBuffer = new char[2];
  int v = 12345;
  memcpy(pBuffer, &v, sizeof(v));
  delete[] pBuffer;
  正如代码所表示的,我的缓冲区pBuffer有且仅分配了2Bytes的空间,然面我却向它塞了4Bytes的值,显然这是不正确的,DEBUG一下,将出现:DAMAGE:After normal block(#94)的错误。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值