C語言 動態記憶體分配

2021-09-24 22:47:49 字數 1672 閱讀 7061

記憶體分配函式:

malloc函式--分配記憶體塊,但是不對其進行初始化。

calloc函式--分配記憶體塊,並且對其進行初始化(清0)。

realloc函式--調整先前分配的記憶體塊大小。

函式原型:

void* malloc(unsigned size);

void* realloc(void* ptr, unsigned newsize);  

void* calloc(size_t numelements, size_t sizeofelement); 

引數說明:

(1)malloc函式:引數size為需要分配的記憶體空間的長度。

(2)realloc函式:引數ptr為原有的空間位址,newsize是重新申請的位址長度。

(3)calloc函式:引數sizeofelement為申請位址的單位元素長度,numelements為元素個數。

驗證**:

#include #include #define allot_size   40   //分配長度

int main(void)

printf("malloc address:%p\n",p);

for(i = 0; i < len / sizeof(int); i++)

printf("\n");

//calloc

//在記憶體中申請allot_size*sizeof(int)位元組大小的連續位址空間

q = calloc(allot_size,sizeof(int));

if(null == q)

printf("calloc address:%p\n",q);

for(i = 0; i < allot_size / sizeof(int); i++)

printf("\n");

//malloc初始化

memset(p,-1,len);

printf("malloc address:%p\n",p);

for(i = 0; i < len / sizeof(int); i++)

printf("\n");

//realloc

//給乙個已經分配了位址的指標重新分配空間

p = realloc(p,len * 2);

if(null == p)

//memset(p,0,len * 2);

printf("realloc address:%p\n",p);

for(i = 0; i < len * 2 / sizeof(int); i++)

//釋放空間

free(p);

free(q);

}

動態的記憶體分配適用於所有型別的資料,但是主要用於字串、陣列和結構。利用動態分配,可以設計出能根據需要擴大或縮小的資料結構,例如表、樹或者其他資料結構。

靜態記憶體和動態記憶體的比較

靜態記憶體是由系統自動分配、自動釋放

靜態記憶體是在分配的 。

動態記憶體是由程式設計師手動分配、手動釋放

動態記憶體是在分配的。

c語言動態記憶體分配 C 動態記憶體分配

動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...

C語言動態記憶體分配

c語言動態記憶體分配 動態資料結構可以在執行時靈活新增 刪除或重排資料項。在執行時分配記憶體空間的過程稱為動態記憶體分配。記憶體分配函式如下 malloc 分配所需的位元組大小,並返回指向所分配空間的第乙個位元組的指標 calloc 為元素陣列分配空間,並初始化為零,然後返回指向該記憶體的指標 fr...

C語言 動態記憶體分配

c語言有儲存變數的區域稱之為棧 stack 除此之外 c語言還允許建立自己的動態記憶體區域 以存放一些臨時的資料 這區域稱之為 堆 heap 也就是存放執行時的資料 可以根據程式的需要 向系統申請所需大小的空間 由於未宣告部分定義他們為變數或者陣列因此只能通過指標去訪問 建立記憶體動態分配主要由4個...