什麼是動態記憶體的申請和釋放?
當程式執行到需要乙個動態分配的變數時,必須向系統申請取得堆中的一塊所需大小的儲存空間,用於儲存該變數。當不再使用該變數時,也就是它的生命結束時,要顯式釋放它所占用的儲存空間,這樣系統就能對該堆空間進行再次分配,做到重複使用有限的資源。
在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,分配記憶體的型別...