爲什麼需要動態分配內存
- 動態數組很好的解決了傳統數組的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