所謂動態記憶體分配(dynamic memory allocation)就是指在程式執行的過程中動態地分配或者**儲存空間的分配記憶體的方法。
動態記憶體分配不像陣列等靜態記憶體分配方法那樣需要預先分配儲存空間,而是由系統根據程式的需要即時分配,且分配的大小就是程式要求的大小。
動態記憶體分配較靜態記憶體分配有以下兩個特點:
(1)不需要預先分配儲存空間;
(2)分配的空間可以根據程式的需要擴大或縮小。
在c語言中,提供了malloc()和calloc()函式來動態地取得記憶體空間。
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()函式的格式為:
指標 = calloc(n,size);realloc()函式能擴大或縮小已取得的記憶體空間。格式如下:
指標 = realloc(原先的指標,現需空間的大小);請注意,計算機可能會另外找一塊足夠大的空間來取代原先分配的空間。因此,新返回的指標值可能與原先的指標值不同。
C語言 動態記憶體
動態記憶體 動態的建立記憶體,申請記憶體空間為變數 存放於堆區,不能通過變數名或陣列名引用,只能通過指標引用,在windows中,堆中最大的連續記憶體塊為1.3g左右。標頭檔案 includemalloc 在空閒記憶體中分配連續記憶體,約等於2g,分配成功時返回乙個指向該記憶體塊的指標即第乙個位元組...
c語言動態記憶體分配 C 動態記憶體分配
動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...
C語言動態記憶體分配
c語言動態記憶體分配 動態資料結構可以在執行時靈活新增 刪除或重排資料項。在執行時分配記憶體空間的過程稱為動態記憶體分配。記憶體分配函式如下 malloc 分配所需的位元組大小,並返回指向所分配空間的第乙個位元組的指標 calloc 為元素陣列分配空間,並初始化為零,然後返回指向該記憶體的指標 fr...