C C 動態記憶體管理

2021-07-23 23:22:14 字數 1125 閱讀 3590

一、c語言中動態記憶體管理方式

c語言中使用:malloc/calloc/realloc/free進行記憶體的管理和釋放

1.malloc動態記憶體申請

int *ptest = (int*)malloc(10*sizeof(int));  //申請記憶體的方式

free();   //釋放

2.calloc 該函式會將申請的記憶體空間初始化為0

int *ptest1 = (int*)calloc(10,sizeof(int));

free(ptest);

3.reallock 改變原有記憶體空間大小,若不能改變,則將會開闢一段新記憶體將原有的內容拷貝進去 但不會新開闢記憶體初始化

realloc(ptest2,100*sizeof(int));

free(ptest2);

二、常見的記憶體洩露

1.記憶體申請忘記釋放

2.程式邏輯不清,以為釋放了,實際記憶體洩露

3. 陳旭誤操作,將堆破壞

4.釋放時傳入的位址和申請時的地方不相同

三、c++中動態記憶體管理

c++中通過new和delete運算子進行動態記憶體管理(注意new和delete不是函式是運算子,因此執行效率高)

注意:new和delete 、new和delete一定要匹配使用,否則可能存在記憶體洩漏。

(1).maloc/free和new/delete的區別和聯絡

1.malloc/free是c/c++標準庫的函式,new/delete是c++操作符

2. malloc/free只是動態分配記憶體空間/釋放空間。而new/delete除了分配空間還會呼叫建構函式和析構函式進行初始化與清理(清理成員)。

3.malloc/free需要手動計算型別大小且返回值會void*,new/delete可自己計算型別的大小,返回對應型別的指標。

(2).作用

new(呼叫operator new分配空間)呼叫建構函式初始化物件

delete(呼叫operator delete釋放空間)呼叫析構函式清理物件

new(呼叫operator new分配空間)呼叫n次建構函式分別初始化物件

delete(呼叫operator delete釋放空間)呼叫n次析構函式清理物件

void test ()

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...

C C 動態記憶體管理

目錄 總結並剖析malloc free和new delete之間的關係和差異。剖析new delete和new delete做了什麼?實現new array delete array巨集,模擬實現new delete申請和釋放陣列 它們都是動態管理記憶體的入口。malloc free是c c 標準庫...