乙個由有符號下標引起的bug

2021-09-20 14:03:51 字數 369 閱讀 4549

先看段**:

if

(s[d[i]])

這裡的d是乙個char*的記憶體buffer,s是乙個256長度的bool陣列。上段**邏輯是,s已進行過初始化,其作用是過濾位元組,有些位元組對應true,有些位元組對應false。明顯,d[i]有256種可能。上面的邏輯正確麼?

上面的**其實就是我專案裡的一段**,看似沒有問題,實際上有個潛伏的bug。d[i]是有符號的,換句話說,d[i]可能為負。

專案裡d[i]有一次等於0xc4,這個時候s訪問越界了。因為d[i]為負,s[d[i]]往記憶體上游(也就是比s首位址更小的方向)訪問記憶體,結果隨機。

正確的**應該是這樣:s[(uint8_t)d[i]]。

由框架中乙個BUG引起的

今天加班在給new guys做培訓的時候,發生了乙個莫名其妙的問題,幾經周折,才發現是公司現有框架的乙個bug。xml converter valueobject objectid lib class com.icsc.tm.mscdao.tmjcs03vo type unique converte...

memcpy引起的乙個bug

void memcpy void dest,const void src,size t n 由src指向位址為起始位址的連續n個位元組的資料複製到以dest指向位址為起始位址的空間內。memcpy dest,0,5 真正應該使用的是 memset dest,0,5 關於memset memset 函...

由解乙個bug想到的

最近花費了很久時間去解決乙個bug,在我手裡有乙個月了。今天同事出手幫忙解決掉了,分外感激。這個bug如果按照我的思路,再過乙個月也不一定能夠解決掉。三人行,必有我師。同事身上有許多值得我學習的地方。比如,我是從程式碼執行機制方面找尋產生bug的原因,可是程式碼數量龐大。很難發現其中的某一處問題所在...