new delete和malloc free的異同

2021-08-21 23:41:20 字數 1720 閱讀 2723

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