用Free來釋放New出來的東西會發生什麼

2021-06-19 09:19:17 字數 754 閱讀 2465

**:

用c語言中的free函式來釋放c++中的new運算子分配的記憶體,會發生什麼呢? 開始做實驗。

測試**

[cpp]view plain

copy

#include 

#define free_memory

intmain()  

std::cout <

#ifdef free_memory

std::cout <

<

free(pint);  

#else

std::cout <

<

delete

pint;  

#endif

for( 

inti = 0; i != 5; i++ )  

std::cout <

system("pause"

);  

return

0;  

}  

實驗結果

實驗結論

對於簡單資料型別(例如int [ ]),使用new分配記憶體後,可以使用free來釋放上述釋放的記憶體,效果與delete相同。而複雜資料型別( 例如乙個類指標),則不能用free來進行記憶體的釋放,因為free與delete不同,不會執行類的析構函式。

原因分析

參見

C 用new來建立物件和非new來建立物件的區別

我們都知道c 中有三種建立物件的方法,如下 include using namespace std class a a int main 第一種和第二種沒什麼區別,乙個隱式呼叫,乙個顯式呼叫,兩者都是在程序虛擬位址空間中的棧中分配記憶體,而第三種使用了new,在堆中分配了記憶體,而棧中記憶體的分配和...

C 用new來建立物件和非new來建立物件的區別

我們都知道c 中有三種建立物件的方法,如下 include using namespace std class a a int main 第一種和第二種沒什麼區別,乙個隱式呼叫,乙個顯式呼叫,兩者都是在程序虛擬位址空間中的棧中分配記憶體,而第三種使用了new,在堆中分配了記憶體,而棧中記憶體的分配和...

該怎麼用 new 來分配多維陣列?

有很多方法,端視你對陣列大小的伸縮性之要求而定。極端一點的情形,如果你在編譯期就知道所有陣列的維度,你可以靜態地配置 就像 c 一樣 class fred void manipulatearray 另乙個極端情況,如果你希望該矩陣的每個小塊都能不一樣大,你可以在自由記憶體裡配置之 void mani...