c語言中已經有了malloc和free為什麼還需要new和

時間 2022-04-16 06:08:09

1樓:匿名使用者

轉的1,malloc與free是c++/c語言的標準庫函式,new/delete是c++的運算子。它們都可用於申請動態記憶體和釋放記憶體。

2, 對於非內部資料型別的物件而言,光用maloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任務強加於malloc/free。

3,因此c++語言需要乙個能完成動態記憶體分配和初始化工作的運算子new,以乙個能完成清理與釋放記憶體工作的運算子delete。注意new/delete不是庫函式。

4,c++程式經常要呼叫c函式,而c程式只能用malloc/free管理動態記憶體

new 是個操作符,和什麼"+","-","="...有一樣的地位

簡單的說:

malloc,free是c的函式,new,delete是c++的運算子

此外,new是強制型別的,malloc不是,需要型別轉換

當然還有很多不同

new 可以呼叫建構函式在宣告的時候初始化

malloc只是分配空間,需要在其他地方初始化

而delete不僅會釋放空間,在釋放前會呼叫析構函式

而且malloc需要指定分配空間大小, 而new是自動計算的

2樓:彌農夾谷豔芳

new和delete是c++中的用法,對於c++而言,new和delete可以提供比c語言更好的記憶體分配機制(當malloc無法分配記憶體,malloc會返回null,即0,表示分配失敗,這樣等同於將「糟糕的結果」踢給應用程式,而new一般總是可以分配記憶體,如果new無法分配記憶體,不會返回null,而是暫停程式去執行專門的處理程式,而程式設計師不必操心)

malloc,free和new,delete有區別嗎?如果有,是什麼?

3樓:雨過天晴日丶

1 我認為new\delete和malloc\free最大區別是對物件的理解。

如果你使用

foo* foo = malloc(sizeof(foo));//foo是乙個類

初始化,那麼你將不會呼叫foo的構造方法,而只是單純的分配空間。而且我們只認為你是分配乙個空間,而不是想建立乙個物件。

foo* foo = new foo();則會呼叫foo的構造方法來初始化物件,也就是說你既要分配空間又要初始化這段空間,讓它變成乙個物件。

對於delete和free也有同樣的問題,就是delete會呼叫析構函式,free則不會。

說白了,new\delete玩的是物件,而malloc\free僅僅是記憶體空間而已

2 對於除去物件意外的其他情況,比如int和float等

int* array=new int[10];和int* array=malloc(sizeof(int)*10);只存在使用技巧的差別,沒有本質的差別。

3 最後也提醒你new\delete和malloc\free只能成對使用,不能混了。

4樓:匿名使用者

malloc 只是分配指定大小的記憶體;

free 也只是釋放之前申請的記憶體;

new 在分配記憶體後,還會呼叫分配的物件的建構函式;

delete 在釋放之前分呼叫物件的析構函式;

5樓:匿名使用者

1,malloc與free是c++/c語言的標準庫函式,new/delete是c++的運算子。它們都可用於申請動態記憶體和釋放記憶體。

2, 對於非內部資料型別的物件而言,光用maloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任務強加於malloc/free。

3,因此c++語言需要乙個能完成動態記憶體分配和初始化工作的運算子new,以乙個能完成清理與釋放記憶體工作的運算子delete。注意new/delete不是庫函式。

4,c++程式經常要呼叫c函式,而c程式只能用malloc/free管理動態記憶體

new 是個操作符,和什麼"+","-","="...有一樣的地位

簡單的說:

malloc,free是c的函式,new,delete是c++的運算子

此外,new是強制型別的,malloc不是,需要型別轉換

當然還有很多不同

new 可以呼叫建構函式在宣告的時候初始化

malloc只是分配空間,需要在其他地方初始化

而delete不僅會釋放空間,在釋放前會呼叫析構函式

而且malloc需要指定分配空間大小, 而new是自動計算的

c語言中,malloc和free是什麼意思?

6樓:四捨**入

屬於記憶體管理的兩個函式,malloc是申請記憶體的,free是釋放記憶體的。

1、malloc一般用法:

int *t=null;

t=(int *)malloc(sizeof(int));

也可以在sizeof前面加上乙個'n*'這就成了乙個動態分配陣列的方法。

2、free一般用法:

int *t=null;

t=(int *)malloc(sizeof(int));

free(t);

這樣t所指的空間就被釋放掉了。

7樓:天雲小店

malloc和free是c語言中申請記憶體空間與釋放記憶體空間的函式。

函式原型:void *malloc(unsigned int size);

功       能:在記憶體的動態儲存區中分配乙個長度為size的連續空間。

函式原型:void free(void *p);

功       能:釋放指標p所指向的記憶體區返  回 值:無

舉例如下:

int *p;  // 定義乙個int型別的指標p = (int *)malloc(4);  // 分配4個連續的記憶體單元給指標p

free(p);  // 釋放指標p所指向的記憶體單元

8樓:匿名使用者

動態申請空間,後面的是釋放空間

前面是比如*p=(void*)malloc(sizeof());

free(p);

申請要是不釋放的就會占用記憶體的使用,記住都是在堆裡面申請,不是棧

9樓:匿名使用者

malloc是申請分配一塊記憶體區域來存放指標free是釋放申請區域

用法:malloc

10樓:公紅葉孤

malloc是動態分配空間的意思。

一般用法

int *t=null;

t=(int *)malloc(sizeof(int));

也可以在sizeof前面加上乙個'n*'這就成了乙個動態分配陣列的方法。

free是釋放空間的意思。

一般用法:

int *t=null;

t=(int *)malloc(sizeof(int));

free(t);

這樣t所指的空間就被釋放掉了。

c語言在子函式中使用malloc,會自動free嗎?

11樓:

如果子函式需要return乙個內部分配的空間,那麼釋放就歸呼叫者來free了,否則內部free再返回已經是無效空間

不過一般不這樣做,一般誰分配誰釋放建議主函式分配傳入然後子函式自己往裡面存東西,再由主函式負責釋放

12樓:

c沒有自動釋放功能,需要手動free掉malloc的堆空間。如果malloc空間後忘記free就會造成記憶體洩露問題:記憶體洩露是乙個比較麻煩的問題,要是malloc少量空間而不free,在測試階段很難發現,而投入生產中可能就會變成大量malloc而不free,記憶體空間沒了,然後程式就掛了

13樓:

在子函式不需要free,否則子函式裡做的事情就白做了!

記得在主調函式free就行!

malloc和new的區別是什麼?

14樓:次次次蛋黃公尺亞

malloc和new從申請的記憶體所在位置、返回型別安全性、記憶體分配失敗時的返回值、是否需要指定記憶體大小這四點區分。

1、申請的記憶體所在位置不同

new操作符從自由儲存區(free store)上為物件動態分配記憶體空間。自由儲存區是c++基於new操作符的乙個抽象概念,凡是通過new操作符進行記憶體申請,該記憶體即為自由儲存區。

malloc函式從堆上動態分配記憶體。堆是作業系統中的術語,是作業系統所維護的一塊特殊記憶體,用於程式的記憶體動態分配,c語言使用malloc從堆上分配記憶體,使用free釋放已分配的對應記憶體。

2、返回型別安全性不同

new操作符記憶體分配成功時,返回的是物件型別的指標,型別嚴格與物件匹配,無須進行型別轉換,故new是符合型別安全性的操作符。

malloc記憶體分配成功則是返回void * ,需要通過強制型別轉換將void*指標轉換成我們需要的型別。

3、記憶體分配失敗時的返回值不同

new記憶體分配失敗時,會丟擲bac_alloc異常,它不會返回null。

malloc分配記憶體失敗時返回null。

4、是否需要指定記憶體大小不同

使用new操作符申請記憶體分配時無須指定記憶體塊的大小,編譯器會根據型別資訊自行計算。

malloc則需要顯式地指出所需記憶體的尺寸。

15樓:

malloc 是c語言的標準庫函式,它實現了在堆記憶體管理中進行按需分配的機制,但是它不提供在c++中對像構造的支援,而new 則是乙個 在c++中同時完成堆記憶體按需分配支援和對像構造功能的運算子,由於c++中的運算子功能較c中的運算子在意義上作了擴充套件的,可以理解成函式呼叫 。 malloc則是底層的,new的實現中是呼叫了malloc來實現堆記憶體的統一管理的,因此,可以認為new 是malloc的擴充套件同根版,而且單從記憶體分配的功能上來說,它們是在同一塊記憶體區域內實現統一管理的

16樓:匿名使用者

malloc是c語言裡面申請記憶體空間的方法

new是c++裡面申請記憶體空間的方法,幾乎一樣

17樓:匿名使用者

1,malloc與free是c++/c語言的標準庫函式,new/delete是c++的運算子。它們都可用於申請動態記憶體和釋放記憶體。

2,對於非內部資料型別的物件而言,光用maloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任務強加於malloc/free。

3,因此c++語言需要乙個能完成動態記憶體分配和初始化工作的運算子new,以乙個能完成清理與釋放記憶體工作的運算子delete。注意new/delete不是庫函式。

4,c++程式經常要呼叫c函式,而c程式只能用malloc/free管理動態記憶體。

5、new可以認為是malloc加建構函式的執行。new出來的指標是直接帶型別資訊的。而malloc返回的都是void指標。

一:new delete 是運算子,malloc,free是函式

malloc與free是c++/c語言的標準庫函式,new/delete是c++的運算子。它們都可用於申請動態記憶體和釋放記憶體。

對於非內部資料型別的物件而言,光用maloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任務強加於malloc/free。

因此c++語言需要乙個能完成動態記憶體分配和初始化工作的運算子new,以及乙個能完成清理與釋放記憶體工作的運算子delete。注意new/delete不是庫函式。

C語言中變數儲存型別有哪些,C語言中變數的儲存型別有哪幾種,儲存方式哪幾種?謝嘍

自動 靜態 寄存 易失 一說是自動 auto 靜態 static 暫存器的 register 和外部的 extern 然而某認為extern是用來對編譯器進行宣告變數的,而不是定義。自動,靜態,外部,寄存在函式體內宣告的變數在預設情況下都是auto儲存型別 在 塊之間傳遞資訊的一種方法就是使用外部變...

C語言中的圖形函式有哪些,C語言中的圖形函式是必須學的嗎?

一 畫素函式 putpiel 畫畫素點函式 getpixel 返回像素色函式 二 直線和線型函式 line 畫線函式 lineto 畫線函式 linerel 相對畫線函式 setlinestyle 設定線型函式getlinesettings 獲取線型設定函式setwritemode 設定畫線模式函式...

冷戰已經有半年了,冷戰已經有半年了

如果她父母說話,她能聽進去,試試和岳父岳母溝通一下,通常女兒和母親感情不錯,試試和岳母溝通一下,看岳母能否居中協調一下,或許可以緩和一下你們的關係你們兩個需要好好溝通下,能感覺她態度很堅決,肯定是有大矛盾或者就是你平時的小事情表現出來的東西讓他失望了,所以才會那樣的,你找他認真談一次,就說以後會改,...

c語言中要記的單詞有哪些,C語言中要記的單詞有哪些?

c語言中主要記住的是關鍵字,一般來說也不用刻意去記,因為寫的多了,用的多了,自然熟悉。c語言的常用關鍵字及意義如下所示 九種控制語句 if else if.else for break case week等等,以及32個關鍵字 在學的過程中你多寫點小程式 很快就能記住那些單詞,個人覺得c語言還是相對...

c語言語句有哪些,C語言中for語句怎麼輸出NO 加數字

c語言基礎語句 從程式流程的角度來看,程式可以分為三種基本結構,即順序結構 分支 選擇 結構 迴圈結構。這三種基本結構可以組成所有的各種複雜程式。c語言提供了多種語句來實現這些程式結構。c程式的語句 c程式的執行部分是由語句組成的。程式的功能也是由執行語句實現的。c語句可分為以下五類 1.表示式語句...