c c 動態記憶體管理

2021-08-04 09:48:21 字數 1781 閱讀 6357

c語言使用庫函式中的malloc/calloc/realloc/free進行動態記憶體管理

1.malloc:在記憶體中開闢一塊指定大小的空間,將空間首位址給指標變數。

函式宣告:void*malloc(size_t size);

如果分配成功則返回指向被分配記憶體的指標,否則返回空指標null。

2.calloc:在記憶體的動態儲存區中分配n個長度為size的連續空間。

函式宣告:void*calloc(size_t n,size_t size);

函式返回乙個指向分配起始的指標,如果分配不成功,返回null。

3.realloc:先判斷當前的指標是否有足夠的連續空間,如果有,擴大mem_address指向的位址,並且將mem_address返回,如果空間不夠,先按照newsize指定的大小分配空間,將原有資料從頭到尾拷貝到新分配的記憶體區域,而後釋放原來mem_address所指記憶體區域(注意:原來指標是自動釋放,不需要使用free),同時返回新分配的記憶體區域的首位址。

函式宣告:void *realloc(void *mem_address, unsigned int newsize);

如果重新分配成功則返回指向被分配記憶體的指標,否則返回空指標null。

4.free:原型: void free(void *ptr)

功能: 釋放ptr指向的儲存空間。被釋放的空間通常被送入可用儲存區池,以後可在呼叫malloc、realloc以及calloc函式來再分配。

c動態記憶體管理的缺陷引入c++動態記憶體管理:

malloc與free是c++/c語言的標準庫函式,new/delete是c++的運算子。它們都可用於申請動態記憶體和釋放記憶體。

: 對於非內部資料型別的物件而言,光用malloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任務強加於malloc/free

c++通過new和delete動態管理記憶體。

new/delete動態管理物件。

new/delete動態管理物件陣列。

operator new/operator delete operator new/operator delete:只分配(釋放)所要求的空間,不呼叫相關物件的構造(析構)函式。

定位new表示式:是在已分配記憶體空間中呼叫建構函式初始化乙個物件。

定位new表示式的常見形式

new(address) type;

new(address) type(initializers);

new(address) type[size];

new(address) type[size];

定位new表示式呼叫 void operator new(size_t, void ); 分配記憶體。

delete 析構函式呼叫細節剖析:**用 new 分配的一組物件的記憶體空間的時候用 delete,析構後將原指標賦為null。

C C 動態記憶體管理

一 c語言中動態記憶體管理方式 c語言中使用 malloc calloc realloc free進行記憶體的管理和釋放 1.malloc動態記憶體申請 int ptest int malloc 10 sizeof int 申請記憶體的方式 free 釋放 2.calloc 該函式會將申請的記憶體空...

C C 動態記憶體管理

注意malloc free new delete new delete一定要匹配使用,否則可能出現記憶體洩漏甚至崩潰的問題小結 1 兩組函式都負責動態記憶體管理 2 malloc free是c c 標準庫的函式,而new delete是c 操作符。3 malloc free只負責動態分配空間 釋放空...

C C 動態記憶體管理

c語言動態記憶體管理 malloc calloc realloc free int p1 int malloc sizeof int malloc返回值型別為void int p2 int calloc 1,sizeof int 動態分配並初始化為0 int p3 int realloc p1,si...