C語言中動態記憶體管理方式。

2021-09-24 20:41:11 字數 1280 閱讀 8341

c語言中關於動態記憶體管理的方式有三種,他們分別是malloc,calloc.realloc,雖然說他們都可以進行動態記憶體申請,但是他們之間還有一些相同之處,和不同之處。下面我們可以簡要的說明一下:

三個函式的宣告分別是:

void * malloc ( size_t size );

(1)函式malloc()

在記憶體的動態儲存區中分配一塊長度為size位元組的連續區域,引數size為需要記憶體空間的長度,返回該區域的首位址.

例子:

void * calloc ( size_t num, size_t size );

(2)函式calloc()

與malloc相似,引數 size_t size為申請位址的單位元素長度,size_t num申請 元素個數,即在記憶體中申請size_t num*size_t位元組大小的連續位址空間.

例子:

void * realloc ( void * ptr, size_t size );

(3)函式realloc()

給乙個已經分配了位址的指標重新分配空間,引數ptr為原有的空間位址,newsize是重新申請的位址長度.

例子:

一. 相同之處:(1)都是c語言從堆中申請空間,申請成功的空間必須用(free)釋放,返回值型別都是void*,在使用時必須進行強制型別轉換。

(2)申請空間成功之後,返回值為所申請空間的位址,失敗則返回null。

二. 不同之處:1.malloc:新分配的記憶體塊的內容沒有初始化,保留下的是隨機值。

2.calloc:為num元素陣列分配記憶體塊,每個元素的大小都是位元組長,並將其所有位初始化為零。

3.realloc:(1)ptr引數所指向的記憶體塊大小將更改為大小位元組,從而擴充套件或減少塊中可用的記憶體數量。

(2)函式可以將記憶體塊移動到新位置,在這種情況下,將返回新位置。即使塊被移動,記憶體塊的內容也會保留到新大小和舊大小中較小的那個。如果新大小更大,則新分配的部分的值是不確定的。

(3)在ptr為空的情況下,函式的行為與malloc完全相同,分配乙個大小為位元組的新塊,並返回指向它開頭的指標。

(4)在大小為0的情況下,將釋放先前在ptr中分配的記憶體,就像呼叫free一樣,並返回乙個空指標。

c語言中的動態記憶體管理

malloc calloc realloc的區別與聯絡 在c語言 c 中和記憶體申請與釋放的相關函式有 alloc malloc calloc realloc free.1 alloc是在棧上申請空間,無需使用者主動釋放,當函式執行結束時,在棧上分配的記憶體會被自動釋放,棧記憶體分配運算內置於處理器...

c語言中的動態記憶體管理

malloc通常用來開闢一段連續記憶體空間 void malloc size t size 1 如果記憶體開闢成功,則返回乙個指向開闢好空間的指標 2 如果開闢失敗,則返回乙個null指標,因此malloc的返回結果必須判空 3 由於返回值型別為void 具體使用時根據自身需要強制型別轉換 4 如果...

C C 動態記憶體管理方式的區別

c 動態記憶體管理方式 知識點習題 malloc calloc realloc和free 示例 void test 1.malloc calloc realloc的區別是什麼?解答 void malloc size t 要申請空間的位元組數 void calloc size t,size t 第乙個...