昨天在調程序時,發現了一個問題,在Debug模式下出現Debug Error!DAMAGE:after Normal block (#xxxx)錯誤,Release沒問題。網上一搜,知道這是由越界訪問內存,破壞了內存中其他數據而引起問題。但大部分帖子介紹這個問題都是由動態申請內存和動態釋放引起。而我的程序中根本沒有用過new和delete;也有一個帖子說數組越界也會發生這種情況,我又查了很多遍,數組都正常。只好繼續調代碼,最后被我跟到一個調用的DLL(DLL也是自己寫的)里面,并且鎖定在一行代碼上:
ModelName = strcat(ModelName,".txt"); // ModelName的類型是char *
這里ModelName是從調用DLL的類的實例中傳過來的一個字符串指針,在DLL中由于上面的語句,導致調用處的字符指針越界,從而產生了這個錯誤。因為Release沒有內存越界提示,所以沒有發現這個問題,但這樣的內存隱患足以致命。可見操作指針內存小心為上,故慎重的把它記錄下來。