C語言中動態記憶體的申請和釋放

2021-09-12 17:18:55 字數 1250 閱讀 9348

什麼是動態記憶體的申請和釋放?

當程式執行到需要乙個動態分配的變數時,必須向系統申請取得堆中的一塊所需大小的儲存空間,用於儲存該變數。當不再使用該變數時,也就是它的生命結束時,要顯式釋放它所占用的儲存空間,這樣系統就能對該堆空間進行再次分配,做到重複使用有限的資源。

在c語言中動態記憶體的申請和釋放:

1.malloc函式

函式原型如下:

#include

void *malloc(size_t size);

例如:int *p=(int *)malloc(sizeof(int)*length);

引數size代表需要動態申請的記憶體的位元組數,若記憶體申請成功,函式返回申請到的記憶體的起始位址,若申請失敗,返回null。

2.realloc函式:更改已經配置的記憶體空間,即更改由malloc()函式分配的記憶體空間的大小。

函式原型下:

#include

void * realloc(void * ptr,unsigned newsize)

例如:int * p =(int *)malloc(sizeof(int)* length);p = realloc(p,20);

3.calloc函式:與malloc()函式類似,calloc() 函式返回乙個指標。如果儲存不同型別,應該使用型別指派運算子。calloc()函式接受兩個引數,都應是無符號整數。第乙個引數是所需記憶體單元的數量,第二個引數是每個單元以位元組計的大小。

函式原型如下:

#include

void * calloc(size_t num,size_t sizeofelement)

例如:char * p =(char *)calloc(length,sizeof(char *));

4.free函式:釋放 malloc(或calloc、realloc)函式給指標變數分配的記憶體空間。使用後該指標變數一定要重新指向null,防止野指標出現,有效規避誤操作。

free函式與malloc()函式配對使用,malloc函式釋放申請的動態記憶體。對於free(p)這句語句,如果p 是null 指標,那麼free 對p 無論操作多少次都不會出問題。如果p 不是null 指標,那麼free 對p連續操作兩次就會導致程式執行錯誤

函式原型如下:

void free(void *ptr);

※在c中free崩潰的原因:

➀.越界

➁.指標移動

➂.重複釋放同乙個記憶體

➃.釋放棧記憶體

資料儲存 動態記憶體申請和釋放(c語言)

函式宣告 返回為 void 型別 void malloc size t size 需要的標頭檔案 include 或 include 應用 指標 型別 變數名 指標 型別 malloc n sizeof 型別 指標 型別 強轉為同變數型別 如 int arr int malloc n sizeof ...

記憶體(堆)的動態申請和釋放

需要標頭檔案 stdlib.h void malloc size t size void free void ptr 需要說明的是 申請 1 引數是申請記憶體的位元組數。2 申請的是一塊連續的記憶體。3 返回值是void 型別,因此,要將他的返回值付給乙個指標的時候,一定要型別轉換。釋放 1 引數是...

記憶體的申請和釋放

常規用法 virtualalloc lpvoid lpaddress,size t dwsize,dword flallocationtype,dword flprotect lpaddress,指定記憶體開始的位址。dwsize,分配記憶體的大小。flallocationtype,分配記憶體的型別...