動態分配函式

2021-10-03 16:15:54 字數 2333 閱讀 5097

批量資料的儲存

動態記憶體分配函式

void

*malloc

(unsigned

int size)

;void

*calloc

(unsigned

int n,

unsigned

int size)

;//分配n個,每個大小為size

void

*realloc

(void

* p_block,unsignde int size)

;//重新分配

void

free

(void

* p_block)

;//釋放

常用的malloc和free函式:

(1)malloc函式

void

*malloc

(unsigned

int size)

;

向系統申請分配指定位元組數的儲存空間,

分配size位元組儲存空間,分配成功返回首位址,

分配失敗返回null。

int i,

*p=(

int*

)malloc(6

*sizeof

(int))

;if(p)for

(i=0

;i<

6;i++

) p[i]

=i;else

printf

("dynamic alloc failed!"

)

(2)free函式

void

free

(void

* p_block)

;

釋放p_block指向的動態分配的儲存空間。

如:free§;

一旦釋放,就不能再用該指標引用儲存區內的資料。

如果指標為null,free函式無釋放操作。

注意:動態分配的儲存空間一定要用free函式釋放,而靜態分配的儲存空間當程式執行完成的時候自動釋放。

int

*p;//定義指標變數pp=(

int*

)malloc

(sizeof

(int))

;//分配存放整型資料的儲存空間,位址賦給p

if(p ==

null

)//如果記憶體分配不成功

……free

(p);

//釋放p所指向的儲存空間

(3)calloc函式:

void

*calloc

(unsigned

int n,

unsigned

int size)

;

向系統申請分配n項大小相同的儲存空間

分配成功:返回新分配儲存空間的首位址,新分配儲存空間均被初始化為0;

分配失敗:返回null

例如:int *q=(int*)calloc(6*sizeof(int));

可以替代mallocint *q=(int*)malloc(6*sizeof(int));

(如果不考慮初始化的值)

(4)realloc函式

void

*realloc

(void

* p_block,unsignde int size)

;

對指標所指向的已動態分配的儲存空間重新進行動態儲存分配

如果縮小空間則返回的位址是原位址;

如果是擴大空間,則有三可能

①原空間位置足夠的空間可以擴充,返回的位址與擴充前的位址相同;

②如果原位置無足夠的空間,按照size指定的大小重新分配空間,將原有的資料從頭到尾拷貝到新分配的記憶體區域,而後釋放原來指標所指記憶體區域,同時返回新分配的記憶體區域的首位址;

③否則說明記憶體無足夠的空間可以分配,分配失敗,返回值為null。

動態陣列實現的一般過程:

①定義陣列元素型別(t)的指標§

②指定陣列要存放的元素個數(n)

③動態申請(n*sizeof(t))大小的儲存空間,並讓p指向該儲存空間首位址

④通過p對陣列進行賦值和操作

⑤使用結束後釋放陣列空間

mallco動態分配 malloc動態分配多維陣列

下面試自己寫的三個測試程式,如果看懂了基本上動態分配多維陣列就沒什麼問題啦 重點 1 深刻理解多維陣列的概念,多維陣列在記憶體中的分配情況,基本上動態分配也沒什麼問題的。然後還要注意一點的就是,釋放是分配的逆過程!include include include void main void int ...

常見動態分配記憶體分配函式

1.malloc函式的使用方法 void malloc unsigned size 其中size是指的分配記憶體的位元組 void malloc unsigned size 包含在庫函式 stdlib.h 中,作用是在記憶體的堆區分配乙個大小為size的連續空間,如果分配記憶體成功,函式返回新分配記...

記憶體動態分配

陣列的元素儲存於記憶體中連續的位置上。當乙個陣列被宣告時,它所需要的內存在編譯時就被分配。但是,你也可以使用動態記憶體分配在執行時為它分配記憶體。malloc所分配的是一塊連續的記憶體。例如,如果請求它分配100個位元組的記憶體,那麼它實際分配的記憶體就是100個連續的位元組,並不會分開位於兩塊或多...