malloc free和new delete的使用

2021-07-01 23:30:43 字數 966 閱讀 2263

1、malloc

c和c++,都有,申請空間後必須手動釋放,但是在申請類的空間的時候,不會自動呼叫建構函式。

2、new

c++專有,申請空間後可以自動進行空間**,而且申請類的空間的時候,可以自動呼叫建構函式。

3、free(與malloc對應)和delete(與new對應)

通過free釋放空間的時候不會自動呼叫類的析構函式,但是delete會自動呼叫類的析構函式。

4.只要是記憶體模型相同,指向已經申請空間的資料

的引用型別資料也是可以釋放所申請的空間的。

測試**:

#includeusing namespace std;

struct str

;int main()

在free(test)之前斷點提示,記憶體分配如下圖所示:

在free(test)之後斷點提示,記憶體分配如下圖所示:

由前後的除錯結果可知:

1.同型別的引用型別資料也可以釋放其他指標所申請的空間。(其實不同型別的引用型別資料也可以釋放其他指標所申請的空間)。如下圖所示:

**區別:

void * test=(void *)a;

ps1:

當使用malloc申請多個記憶體位址,

比如上面的**就是2個機構體的記憶體位址空間,此時當問需要使用陣列方式。

ps2:

野指標的問題,我們通過斷點除錯發現,當申請的記憶體空間被釋放後,但是指標依然會指向原來所指的位置,這樣會給以後造成負面影響,比如拿原來的指標進行了誤操作,為了避免此類問題 ,我們需要在空間被釋放後,對指標賦null值,即:

test=null;

malloc申請二維陣列

#include

#include

int main()

或者:#include

#include

int main()

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