一、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 標準庫...