關於幾種典型內存錯誤的問題及防禦手段

最近了解到關於檢測內存錯誤的利器: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;數據

                          }

 

二、

相關文章
相關標籤/搜索