- 申請到的內存
向操作系統申請一塊新的內存。申請到的內存,必須在某個地方手動釋放,因此下面2個函數必須配對使用。malloc()和free(),都是標準函 數,在stdlib.h中定義。
根據不同的電腦使用狀況,申請內存有可能失敗,失敗時返回NULL,因此,動態申請內存時,一定要判斷結果是否爲空。malloc()的返回值類型是 “void *”,因此,不要忘記類型轉換。(許多人都省略了。)
- 內存泄漏主要有以下幾種情況:
- 內存分配未成功,卻使用了它。
- 內存分配雖然成功,但是尚未初始化就引用它。
- 內存分配成功並且已經初始化,但操作越過了內存的邊界。
- 忘記了釋放內存,造成內存泄露。
- 釋放了內存卻繼續使用它。
- 對動態內存的錯誤觀念
有人對某一隻在函數內使用的指針動態分配了內存,用完後不釋放。其理由是:函數運行結束後,函數內的所有變量全部消亡。這是錯誤的。動態分配的內存是在 “堆”裏定義,並不隨函數結束而消亡。
有人對某動態分配了內存的指針,用完後直接設置爲NULL。其理由是:已經爲NULL了,這就釋放了。這也是錯誤的。指針可以任意賦值,而內存並沒有釋 放;相反,內存釋放後,指針也並不爲NULL。