正文

heap corruption可能的原因分析2010-03-29 11:43:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yuqiexing/50846.html

分享到:

  最近写了点C++的代码,其中也出现过很多奇怪的错误,heap corruption detected就是其中之一,而且这种错误很容易出现。

    症状一:一般debug出现该错误,都有大致如下的错误信息:

      heap corruption detected:
      after normal block(#xxx) at 0x xxxxxxxx
      crt detected that the application wrote to menory after end of heap buffer

    这是典型的内存溢出错误,常在内存的delete处发生,而且一般在debug版本中可能出现,release版本中可能并不报错.

 

   

 


   

  出现这个错误的原因一般都是操作new申请的内存溢出,因为在c++,如果用new分配一段内存,操作的时候改变了该部分的大小,delete时就会出错.比如说如下部分:

      char* p=new char[5];
      strcpy(p,"aaaaa");
      delete[] p;

 

    这段代码就会出错,因为申请了一个size5的内存,但是strcpy过去了一个size6的字符串,因此破坏了这个指针,运行debug版本的时候就会出现先前的错误,但是在release版本中,溢出一个字节的内存很有可能是没有错误的,然后潜在的隐患是肯定存在的,因此,我们在debug遇到这样的错误时候一定要仔细检查对new出的指针的操作.

    下面这个代码也同样会出错,因为破坏了指针。

      ShadedVertex3d* pVertices = new ShadedVertex3d[nPtNumber];

      for(int i=0; i<nPtNumber+1; i++)

      {

           pVertices[i].x = vBottomPts[i].x;

           pVertices[i].y = vBottomPts[i].y;

           pVertices[i].z = vBottomPts[i].z;

           pVertices[i].cR = m_camColor[0];

           pVertices[i].cG = m_camColor[1];

           pVertices[i].cB = m_camColor[2];

      }


阅读(2962) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册