C語言奇妙之旅_指針動態內存分配

爲什麼需要動態分配內存

  • 動態數組很好的解決了傳統數組的4個缺陷。
  • 傳統數組也叫靜態數組。

 

傳統數組的4個缺陷

 1) 數組的長度必須先制定, 且只能是常數不能是變量。

 2) 傳統形式定義的數組, 該數組的內存無法手動釋放。

3) 數組的長度一旦定義, 其長度就不能在更改。

4) A函數定義的數組, 在A函數運行期間可以被其他函數使用,

          但A函數運行完畢之後, A函數中的數組將無法在被其他函數使用。

 

動態內存分配舉例_構造動態數組

int * p = (int *)malloc(int len);   

 本語句分配了兩塊內存, 一塊內存是動態分配的, 總共len個字節, 另一塊是靜態分配的。 並且這塊靜態內存是p變量本身所佔的內存, 總共4個字節。

 

以下是複製的  ̄□ ̄||

https://blog.csdn.net/weixin_40123831/article/details/80255012

malloc和free

malloc和free 這兩個函數分別用於執行動態內存分配和釋放。這些函數維護一個可用內存池,當一個程序需要另外

一些內存時,它就調用malloc函數,malloc函數從內存中提取一塊合適的內存,並向程序返回一個指向這塊內存的指針。

程序調用free函數把它歸還給內存池。

 

calloc和realloc

注意:

(1)calloc也用於內存分配,區別在於calloc在返回值指向內存的指針之前把它初始化爲0;

calloc的參數包括所需元素的數量和每個元素的字節數。

(2)realloc函數用於修改一個原先已經分配的內存塊的大小,使用這個函數可以使一塊內存放大或者縮小

如果realloc函數的第一個參數是NULL,那麼它的行爲就和malloc一樣。

如果原先的內存塊無法改變大小,realloc將分配另一塊正確大小的內存,並將原先那塊內容複製到新的塊上,因此,在使用realloc之後,就不能再使用指向就內存的指針,而是應該改用realloc所返回的指針。

 

比較好的 -> https://blog.csdn.net/SpeedMe/article/details/26155855

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