所謂動態記憶體分配(dynamic memory allocation)就是指在程式執行的過程中動態地分配或者**儲存空間的分配記憶體的方法。
動態記憶體分配不象陣列等靜態記憶體分配方法那樣需要預先分配儲存空間,而是由系統根據程式的需要即時分配,且分配的大小就是程式要求的大小。
動態記憶體分配較靜態記憶體分配有以下兩個特點:
1)不需要預先分配儲存空間;
2)分配的空間可以根據程式的需要擴大或縮小。
在c語言中,提供了malloc()和calloc()函式來動態地取得記憶體空間。
(一)malloc()和free()函式
malloc()和free()是最常用的動態記憶體分配函式。如果在執行時需要空間來儲存資料,則適合使用malloc()函式,用完則用free()釋放該記憶體空間。
malloc()的格式為:
指標 = malloc(空間大小);例如:pstr = malloc(100);
這個指令要求計算機分配100bytes空間。malloc()函式會返回該空間的位址,且存入pstr內,於是pstr指向該空間。
malloc()定義於malloc.h標頭檔案中。
free()函式歸還於malloc()所申請的空間。其格式為:
free(指標);例如:free(pstr);
當malloc()要求空間時,萬一計算機無法提供足夠的空間,就返回null指標。所以,如果pstr等於null,就表示記憶體空間不足,無法滿足malloc()的要求。編寫程式時,應養成「檢查malloc()返回指標值是否為null」的好習慣。
(二)calloc()和realloc()函式
calloc()函式的格式為:
指標 = calloc(n,size);n:共有n個資料;
size:每項需要size個bytes的空間。
realloc()函式能擴大或縮小已取得的記憶體空間。格式如下:
指標 = realloc(原先的指標,現需空間的大小);請注意,計算機可能會另外找一塊足夠大的空間來取代原先分配的空間。因此,新返回的指標值可能與原先的指標值不同。
韓兆新出處:
分類:
[03]c語言雜談
標籤:
c語言雜談
C語言動態分配記憶體
動態開闢記憶體的函式 void malloc size t size 這個函式向記憶體申請 塊連續可 的空間,並返回指向這塊空間的指標 如果開闢成功,則返回 個指向開闢好空間的指標 如果開闢失敗,則返回 個null指標,因此malloc的返回值 定要做檢查 返回值的型別是 void 所以malloc...
C語言動態分配記憶體知識
陣列的長度必須事先指定,只能是常整數,不能是變數 傳統形式定義的陣列,該陣列的記憶體程式設計師無法手動釋放,只能在定義 該陣列的函式使用完畢後,釋放陣列占用的記憶體。陣列的長度一旦定義,其長度就不能更改。傳統形式定義的陣列不能跨函式使用。動態記憶體分配可以很好的解決傳統陣列的缺點。傳統陣列也被稱之為...
C語言動態分配記憶體0823
動態分配記憶體 1為什麼 2c裡面怎麼動態分配記憶體 3c new delete 1因為陣列的範圍有限,如果陣列的太大,就要申請記憶體。2molloc 在c中 然而在c 中 new 中會執行建構函式。molloc 中是不會執行建構函式,列如 maclass p new maclass 執行建構函式 ...