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