1. 程式人生 > >關於new和malloc以及delete和free是否可以混用

關於new和malloc以及delete和free是否可以混用

/*
*1》當申請的空間是內建型別時,delete和free可以混用
*2》當申請的空間是自定義型別時,
*       1>若沒有解構函式,delete和malloc可以混用,有[]和沒有[]都相同
*                    2>若申請的空間有解構函式時,malloc申請的空間可以用delete和free釋放,但是用delete釋放時不能加[]
*                    3>若申請的空間有解構函式時,new申請的空間不能用free釋放,可以用delete釋放,但是釋放時必須加上[]
*/      
#if 0
int main()
{
int a = 10;
int b = 20;
int *p = (int *)malloc(sizeof(int)*10);
int *p1 = new int[10];

free(p);
//free(p1);
//delete p;
delete p1;


return 0;
}
#endif


#if 1


class Test
{
private:
int ma;
public:
Test(int x=0):ma(x)
{}
~Test()
{


}
void fun()
{
cout<<"Test::fun"<<endl;
}
};


int main()
{
Test *p1 = (Test*)malloc(sizeof(Test)*10);
Test *p2 = new Test[10];


//free(p1);
//free(p2);
//delete p1;
//delete ((int *)p1-1);
delete ((int *)p2-1);
//delete []p2;


return 0;
}
#endif

相關推薦

關於newmalloc以及deletefree是否可以混用

/* *1》當申請的空間是內建型別時,delete和free可以混用 *2》當申請的空間是自定義型別時, *       1>若沒有解構函式,delete和malloc可以混用,有[]和沒有[]都相同 *                    2>若申請的空間有

newmalloc以及deletefree的區別

malloc malloc是C語言中的一個函式,作用是動態開闢一塊連續的記憶體(初始值為隨機值)。 原型為: void *malloc( size_t size );//size_t為無符號整型,size為開闢的位元組數。使用時需要指定資料

【C/C++開發】C++ 解構函式以及 delete delete[]的整理

轉自:http://hi.baidu.com/bystander1983/item/bf0b5c12b077cfec9913d651 delete和delete[] 的區別: C++告訴我們在回收用 new 分配的單個物件的記憶體空間的時候用 delete,回收用 new[] 分配的一組物

newmalloc的用法區別

從以下幾個方面總結下new和malloc的區別:   參考部落格: https://blog.csdn.net/nie19940803/article/details/76358673 https://blog.csdn.net/linux_ever/article/details/50

【JS點滴】substringsubstr以及slicesplice的用法區別。

[0 相等 交換 top subst char ima cas 負數 那麽就由一道筆試題引入吧,已知有字符串a=”get-element-by-id”,寫一個function將其轉化成駝峰表示法”getElementById”; var a = "get-element-

第十週(1For each for in for of的解釋例子以及Constructor Arrow function 的restore)

注:引用自https://www.cnblogs.com/ruoqiang/p/6217929.html。 https://blog.csdn.net/zengyonglan/article/details/53465505 。 https://blog.csdn.net/qq_18663

java學習筆記(二)parseIntvalueOf 以及字串+StringBuilder的區別

parseInt和valueOf 我們平時應該都用過或者見過parseInt和valueOf這兩個方法。一般我們是想把String型別的字元數字轉成int型別。從這個功能層面來說,這兩個方法都一樣,都可以勝任這個功能。 但是,我們進入原始碼,看下Integer類下這兩個方法 pars

IQueryableIEnumerable以及AsEnumerable()ToList()的區別

注意:本文背景為 Linq to sql 。文中ie指代IEnumerable,iq指代IQueryable。 IQueryable 和 IEnumerable 的區別 IQueryable延時執行;擴充套件方法接受的是Expression(必須要能轉成sql,否則報錯) I

從鍵盤中輸入一個整數n,求1-n的以及偶數、奇數

n=int(input("從鍵盤中輸入一個數:")) sum1=0 sum2=0 sum3=0 i=1 while i<=n: sum1+=i if i%2==0: sum2+=i else:

java學習筆記(一)parseIntvalueOf 以及字串+StringBuilder的區別

parseInt和valueOf 我們平時應該都用過或者見過parseInt和valueOf這兩個方法。一般我們是想把String型別的字元數字轉成int型別。從這個功能層面來說,這兩個方法都一樣,都可以勝任這個功能。 但是,我們進入原始碼,看下Integer類

字串,陣列,擷取操作。 substringsubstr以及slicesplice,charAt()的用法

slice可運算元組和字串,但substring和substr只能操作字串,splice只能運算元組。 1.substr() substr() 方法可在字串中抽取從 start 下標開始的指定數目的字元。 語法 stringObject.substr(st

Linux 下chmod chown 以及 chgrp用法區別

1、chgrp(轉變檔案所屬使用者組) chgrp 使用者組 檔名 ###便是這個格了。 若是整個目次下的都改,則加-R引數用於遞迴。 如:chgrp -R user smb.conf 2、chown(轉變檔案擁有者) 格局: A:chown 使用者名稱 檔案/目次 B:chown 使用者名

OutputStreamWriterInputStreamReader以及WriterReaderPrintWriter

一、Reader是字元輸入流的父類。Writer是字元輸出流的父類。 字元流是以(char)為單位讀寫資料的。一次處理一個unicode. 字元流的底層仍然是基本的位元組流。 InputStreamReader:字元輸入流。使用該流可以設定字符集,並安裝指

react-native 之 state props 以及 redux react-redux

Component 中 state 和 props 的區別; 元件Component中狀態state和屬性props的區別 state props state是在元件內部定義的一個特殊物件{},既起到元件內部的一種快取作用,也具備由於

jsonjsonP的區別聯絡以及ajaxjsonP的區別

json和jsonP雖然只有一個字母的區別,但是他們之間扯不上關係。 json是一種輕量級的資料交換格式。 jsonp是一種跨域資料互動協議。 json的優點:(1)基於純文字傳遞極其簡單,(2)輕量級資料格式適合網際網路傳遞,(3)容易編寫和解析。 ajax和jsonp

[Java 多執行緒技術](一)執行緒程序以及並行併發的概念

程序與執行緒 1、 程序(Process)是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。在早期面向程序設計的計算機結構中,程序是程式的基本執行實體;在當代面向執行緒設計的計算機結構中,程序是執行緒的容

註解註釋以及SpringSpringMVC常用的註解

1.兩者區別 註解 :參與程式碼編譯,以@開頭的。它是給應用程式看的,單獨使用註解毫無意義,一定要跟工具一起使用,這個所謂的工具實際就是能讀懂註解的應用程式 註釋 :對程式碼沒有影響。對程式碼起到解釋、說明的作用 2.spring常用註解使用解析

多型的使用概述以及弊端好處

多型的概述 多型的概述 多型:同一個物件(事物),在不同時刻體現出來的不同狀態。 舉例: 貓是貓,貓是動物。 水(液體,固體,氣態)。 多型的前提: A:要有繼承關係。

linux的waitpid wait 以及fg bg命令

#include<sys/wait.h> 定義函式 pid_twaitpid(pid_t pid,int * status,int options); 其他數值意義如下: pid<-1 等待程序組識別碼為 pid 絕對值的任何子程序。 pid=-

Verilog中 regwire 用法區別以及alwaysassign的區別

1、從模擬角度來說,HDL語言面對的是編譯器,相當於使用軟體思路,此時: wire對應於連續賦值,如assign; reg對應於過程賦值,如always,initial; 2、從綜合角度,HDL語言面對的是綜合器,相當於從電路角度來思考,此時: wi