踩內存:總的來說,是訪問了不應該訪問的內存地址。尤其在C指針中。可以訪問不合法的內存。

現象:掛死,程序跑的異常,數據被串改


大致原因:數組越界,字符串操作越界,棧指針操作越界,操作了釋放掉了的指針,多線程時序對資源保護控制不當,內存管理異常,使用了其他地方的內存


定位方法:

1. 類似內存泄漏的問題,先定界,後定位,通過內存proc信息(meminfo/media-mem)判斷是具體的模塊,內存段

2. 減法縮小範圍,裁剪模塊,修改應用程序,找到最小場景

3. 加打印,打印出異常和懷疑的地址

4. gdb+watch 異常地址

5. valgrind+effence

6. 代碼深度檢視


個人認爲,踩內存最噁心了。要從源頭開始規避

1. 入參一定要做邊界檢查,防止溢出

2. 代碼不要嵌套太深,在多線程多通道的場景下,很容易重複釋放/申請資源

3. 不要定義過多的局部變量,數組,防止棧溢出,內核中棧的大小是8k吧。看情況使用kmalloc

4. 釋放了的資源及時置空,如果不是立馬就return的話。分支比較多的代碼,很容易就~~~

5. codeDex + codeCC 這些代碼檢視工具平時多跑跑,能發現大量低級問題的。這些低級問題往往要花幾天時間定位。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章