LINGSUIYU'S BLOG

C++博客 联系 聚合 管理
  2 Posts :: 0 Stories :: 10 Comments :: 0 Trackbacks
        昨天在调程序时,发现了一个问题,在Debug模式下出现Debug Error!DAMAGE:after Normal block (#xxxx)错误,Release没问题。网上一搜,知道这是由越界访问内存,破坏了内存中其他数据而引起问题。但大部分帖子介绍这个问题都是由动态申请内存和动态释放引起。而我的程序中根本没有用过new和delete;也有一个帖子说数组越界也会发生这种情况,我又查了很多遍,数组都正常。只好继续调代码,最后被我跟到一个调用的DLL(DLL也是自己写的)里面,并且锁定在一行代码上:

ModelName = strcat(ModelName,".txt");    // ModelName的类型是char *

        这里ModelName是从调用DLL的类的实例中传过来的一个字符串指针,在DLL中由于上面的语句,导致调用处的字符指针越界,从而产生了这个错误。因为Release没有内存越界提示,所以没有发现这个问题,但这样的内存隐患足以致命。可见操作指针内存小心为上,故慎重的把它记录下来。
posted on 2008-08-21 11:10 零碎雨 阅读(5996) 评论(7)  编辑 收藏 引用

Feedback

# re: Debug Error! DAMAGE:after Normal block (#xxxx) 问题 2008-08-21 11:14 沈臻豪(foxtail)
逗号好像是中文的  回复  更多评论
  

# re: Debug Error! DAMAGE:after Normal block (#xxxx) 问题 2008-08-21 13:24 零碎雨
诶,确实,马上改正,谢谢指出!  回复  更多评论
  

# re: Debug Error! DAMAGE:after Normal block (#xxxx) 问题 2008-08-21 15:31 RichardHe
ModelName 要给它分配内存空间就不会错了!  回复  更多评论
  

# re: Debug Error! DAMAGE:after Normal block (#xxxx) 问题 2008-08-21 16:46 零碎雨
问题解决了,非常感谢您的指出!@RichardHe
  回复  更多评论
  

# re: Debug Error! DAMAGE:after Normal block (#xxxx) 问题 2008-08-21 17:31 RichardHe
怎么解决的????  回复  更多评论
  

# re: Debug Error! DAMAGE:after Normal block (#xxxx) 问题 2008-08-22 00:09 零碎雨
@RichardHe
我把DLL中strcat()这步放在被调用的类里完成,因为事实上被调用前这个字符串已经被确定了,是一个带后缀的文件名。之前是在DLL里面加后缀,其实拿出来加也一样。  回复  更多评论
  

# re: Debug Error! DAMAGE:after Normal block (#xxxx) 问题[未登录] 2012-07-01 23:58 小米
我也遇到這問題~ 還沒辦法解決
  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理