C中關於動態分配內存

  • 申請到的內存

向操作系統申請一塊新的內存。申請到的內存,必須在某個地方手動釋放,因此下面2個函數必須配對使用。malloc()和free(),都是標準函 數,在stdlib.h中定義。

根據不同的電腦使用狀況,申請內存有可能失敗,失敗時返回NULL,因此,動態申請內存時,一定要判斷結果是否爲空。malloc()的返回值類型是 “void *”,因此,不要忘記類型轉換。(許多人都省略了。)

 

  • 內存泄漏主要有以下幾種情況:
  1. 內存分配未成功,卻使用了它。
  2. 內存分配雖然成功,但是尚未初始化就引用它。
  3. 內存分配成功並且已經初始化,但操作越過了內存的邊界。
  4. 忘記了釋放內存,造成內存泄露。
  5. 釋放了內存卻繼續使用它。
  • 對動態內存的錯誤觀念

有人對某一隻在函數內使用的指針動態分配了內存,用完後不釋放。其理由是:函數運行結束後,函數內的所有變量全部消亡。這是錯誤的。動態分配的內存是在 “堆”裏定義,並不隨函數結束而消亡。

有人對某動態分配了內存的指針,用完後直接設置爲NULL。其理由是:已經爲NULL了,這就釋放了。這也是錯誤的。指針可以任意賦值,而內存並沒有釋 放;相反,內存釋放後,指針也並不爲NULL。

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