昨天在调程序时,发现了一个问题,在Debug模式下出现Debug Error!DAMAGE:after Normal block (#xxxx)错误,Release没问题。网上一搜,知道这是由越界访问内存,破坏了内存中其他数据而引起问题。但大部分帖子介绍这个问题都是由动态申请内存和动态释放引起。而我的程序中根本没有用过new和delete;也有一个帖子说数组越界也会发生这种情况,我又查了很多遍,数组都正常。只好继续调代码,最后被我跟到一个调用的DLL(DLL也是自己写的)里面,并且锁定在一行代码上:
ModelName = strcat(ModelName,".txt"); // ModelName的类型是char *
这里ModelName是从调用DLL的类的实例中传过来的一个字符串指针,在DLL中由于上面的语句,导致调用处的字符指针越界,从而产生了这个错误。因为Release没有内存越界提示,所以没有发现这个问题,但这样的内存隐患足以致命。可见操作指针内存小心为上,故慎重的把它记录下来。