malloc和free是c語言中,申請記憶體和釋放記憶體的方式;而new和delete是c++語言中申請記憶體和釋放記憶體的方式
功能相同,都是申請和釋放記憶體
1)格式不同:
molloc申請空間:
型別 *指標變數名=(型別 *)malloc(申請記憶體的位元組數),例如:
int *p1 = (int *)malloc(sizeof(int)); //申請乙個存放int型資料的空間
char *p2 = (char *)malloc(sizeof(char)); //申請乙個存放char型資料的空間
double *p3 = (double *)malloc(sizeof(double)); //申請乙個存放double型資料的空間
int *p4 = (int *)malloc(sizeof(int) * 5); //申請乙個存放int型陣列空間,陣列可以存放5個int元素
free釋放空間:free(指標變數名)
free(p1); //釋放指標p1指向的記憶體
free(p2); //釋放指標p2指向的記憶體
free(p3); //釋放指標p3指向的記憶體
free(p4); //釋放指標p4指向的記憶體
new申請空間:型別 *指標變數名= new 型別
int *p1 = new int; //申請乙個存放int型資料的空間
char *p2 = new char; //申請乙個存放char型資料的空間
double *p3 = new double; //申請乙個存放double型資料的空間
int *p4 = new int[5]; //申請乙個存放int型陣列空間,陣列可以存放5個int元素
new在申請空間的時候也可以對指向的物件進行初始化,例如:
int *p5 = new int(3);
對於陣列,可以通過memset賦值:
memset(p4, 0, 5*sizeof(int));
delete釋放空間:delete 指標變數名,或者
delete 指標變數名 //釋放陣列如果不加上,結果將是不確定的
delete p1; //釋放指標p1指向的記憶體
delete p2; //釋放指標p2指向的記憶體
delete p3; //釋放指標p3指向的記憶體
delete p4; //釋放指標p4指向的記憶體,表示釋放乙個陣列空間
2)free(null)是安全的,但delete null是非法的,如果delete null,編譯器會提示錯誤:
3)申請物件空間的時候,new和delete可以觸發構造和析構,但malloc和free不行
malloc free和new delete的區別
malloc free和new delete的區別malloc與free是c c語言的標準庫函式,new delete是c 的運算子。它們都可用於申請動態記憶體和釋放記憶體。對 於非內部資料型別的物件而言,光用maloc free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡...
new,delete和malloc,free的區別
原型 extern void malloc unsigned int num bytes 說明 分配長度為num bytes位元組的記憶體塊。如果分配成功則返回指向被分配記憶體的指標,分配失敗返回空指標null。當記憶體不再使用時,應使用free 函式將記憶體塊釋放。說明 malloc 向系統申請分...
new delete和malloc free的區別
1,malloc與free是c c語言的標準庫函式,new delete是c 的運算子。它們都可用於申請動態記憶體和釋放記憶體 2,對於非內部資料型別的物件而言,光用maloc free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc f...