最近了解到關於檢測內存錯誤的利器:purify、Boundschecker、Valgrind。有種相見恨晚的感受,因而就順便總結下最近遇到的幾類內存錯誤問題。程序員
一、上層模塊的程序員對下層模塊的內存使用生命週期不清晰,致使野指針的出現。設計
爲了減小數據拷貝,有些底層模塊設計一些接口的時候須要上層申請內存傳入。上層模塊的程序員對這些接口的重視不足,不清楚內存的生命週期,覺得調用完該接口之後就能夠釋放。指針
這個時候剛剛傳入給底層模塊的指針就變成了野指針。底層模塊對內存的後續讀寫都是非法的。接口
示例生命週期
下層模塊B:moduleB_packet(void *p)內存
上層模塊A:moduleA_packet(void *p) {module
pdata = malloc(1024);程序
moduleB_packet(pdata); // 模塊B內部沒有作數據拷貝總結
free(pdata); // 模塊B還在訪問 pdata;數據
}
二、