首頁  >  問答  >  主體

c++中new分配的内存能否使用free释放?

c++中new和free可以结合使用吗?

如下例,我new一个char数组,使用free释放,会不会造成生成什么安全问题?

代码可以编译运行,谢谢各位大神指点。

char * ch = new char[10];
for (int i = 0; i < 10; i++) 
{
    ch[i] = '0' + i;
}
free(ch);
大家讲道理大家讲道理2714 天前774

全部回覆(5)我來回復

  • 阿神

    阿神2017-04-17 14:32:10

    newdelete必須成對的使用,不能和malloc|free混合使用,
    你那麼寫可能對於基本型別是沒有問題的,但是一旦設涉及到構造函數與析構函數就不行了,養成習慣是非常重要的,
    而且標準庫貌似沒有規定new一定要使用malloc來實現,所以new的東西還是需要delete,而不是free

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 14:32:10

    delete更好

    用free有可能new出來的物件未執行析構函數而可能導致程式出錯

    回覆
    0
  • 迷茫

    迷茫2017-04-17 14:32:10

    不建議這樣使用,還是new/delete ,malloc/free搭配使用

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 14:32:10

    因為C++標準沒有要求new的記憶體分配是由malloc分配的,雖然有些C++實作是這麼做的,但是並不是所有的。而且new運算元是可以重載的,可以寫自訂的記憶體分配程式碼,這種情況肯定不能free。另外對於new的類別對象,不可以呼叫free釋放,因為析構函數不會被呼叫。

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 14:32:10

    首先:new和delete底層使用malloc和free實作的
    其次:當是基本的資料型別時,delete和delete[]可以混用
    用free也可以釋放new出的空間,但是new []的有時候就不行
    重點是最好還是不要混用

    回覆
    0
  • 取消回覆