C語言開發中的記憶體檢測基本模組

來源:互聯網
上載者:User
一、前言

在用C語言開發產品時,由於C語言中的指標操作的靈活性,因此在使用指標時也需要特別小心,稍微不嚴謹就會導致記憶體問題,如記憶體未初始化,記憶體泄露,記憶體重複釋放等。但是在實際開發中,使用指標是不可避免的,那麼出現記憶體問題也是不可避免的,因為不可能每個人都會仔細的敲代碼並審查代碼;那麼如果出現這些問題時,有什麼彌補手段了?這時候在項目開發中,使用記憶體檢測模組就非常有必要了。

二、基本原理

  要使用一塊新記憶體,要麼從棧上分配,要麼從堆上分配,如果是從堆上分配,那麼就記錄申請好的記憶體起始地址,分配的大小,檔案名稱和行號(哪個檔案的哪一行調用了分配函數),如果是釋放堆上的記憶體,同樣記錄釋放的地址,檔案名稱和行號(哪個檔案的哪一行調用了釋放函數),這樣對所有的分配和釋放操作進行記錄的話,就可以解決一些記憶體操作問題,

如記憶體泄露,記憶體重複釋放等;大體結構如所示:

三、應用開發

C語言中的記憶體申請函數為malloc,記憶體釋放函數為free,如果我們在產品開發中直接使用這兩個函數,那麼又怎麼會得到檔案名稱和行號了?因此需要對malloc和free函數進行封裝,

使用宏進行封裝,如

#define DAWEN_MALLOC(_size) my_malloc(_size,__FILE__,__LINE__)

#define DAWEN_FREE(_pointer) my_free(_pointer,__FILE__,__LINE__)

其中__FILE__,__LINE__宏為系統自訂的宏,表示當前代碼運行處的檔案名稱和行號,然後,在my_malloc函數中使用malloc系統函數,在my_free函數中使用free系統

函數,這樣就可以記錄一些資訊了。所以在開發時,一律使用my_malloc來申請記憶體,使用my_free來釋放記憶體。

四、記憶體操作注意事項

我在這裡寫了C語言開發中的指標操作注意釋放,希望與大家一起學習:

1、申請一段記憶體後,應對該記憶體記憶體進行初始化,如調用memset進行清零操作

2、申請記憶體後,在進行操作之前,應對申請後的指標進行空值判斷

3、釋放指標後,該指標必須賦值為NULL,當然賦值操作這個操作在my_free函數中進行,所以my_free函數的參數為二級指標

4、盡量堅持誰申請誰釋放的規則,如果不是,則群組成員應該協商或者代碼加註釋說明

五、備忘

關於記憶體覆蓋和記憶體訪問越界,一直找不到好的方法檢測。。鬱悶中。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.