關於strlen誤用的一點記錄

        今天幫一個朋友查一個錯誤,是運行時報vector iterator incompatible,通常這種問題是向量和迭代器的類型不兼容,或者是進行迭代器判等時先後向量的結構發生變化,如erase操做以後。可是朋友的問題比較詭異,類型正確,也沒有進行erase操做,那麼剩下惟一的可能性就是vector在某個地方被破壞了。下斷點調試了一下,發現了一處調用memset的操做,是將一個字符數組類型的成員變量ServerName清零(和出問題的vector成員變量屬於同一個類)。仔細一看,memset的length參數傳的是strlen(ServerName),這就有一個問題,由於strlen的工做機制是統計遇到第一個\0結束符位置的字符數,而ServerName是個512字節的靜態數組,初始化時會隨機填充垃圾數據,那麼遇到\0的時候極可能已經越界,由於類成員變量的內存地址是連續存放的,那麼就會破壞數組後面變量。至此,問題得解,謹以此記錄以備忘。數組

相關文章
相關標籤/搜索