new 和 malloc 的區別

2021-06-06 06:42:17 字數 1280 閱讀 5373

new 和 malloc 的區別:

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指標,需要進行強制型別轉化。

6.new失敗時會呼叫new_handler處理函式,malloc不會,失敗時返回null 。

7.new能通過placement new自動呼叫物件的建構函式,malloc不會 。

綜上所述:

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

malloc是個分配記憶體的函式,供你呼叫的.

new是保留字,不需要標頭檔案支援.

malloc需要標頭檔案庫函式支援.

new 建立的是乙個物件,

malloc分配的是一塊記憶體.

new建立的物件你可以把它當成乙個普通的物件,用成員函式訪問,不要直接訪問它的位址空間

malloc分配的是一塊記憶體區域,就用指標訪問好了,而且還可以在裡面移動指標.

new返回指定型別的指標,自動計算所需大小

malloc需由我們來計算申請空間的大小,並在返回之後轉換成實際型別的指標

malloc 只管分配記憶體,並不能對所得的記憶體進行初始化,所以得到的一片新記憶體中,其值將是隨機的。

常見記憶體錯誤機器對策:

1,記憶體未分配卻使用了.在使用記憶體之前檢查指標是否為null,如果指標p是函式的引數,那麼在函式入口處用assert(p!=null)進行檢查.如果用malloc或new來申請記憶體,應該用if(null==p)或if(p!=null)進行放錯處理.

2.記憶體分配成功凡事為進行初始化就使用

3.記憶體分配成功並且已經初始化,但操作超過了記憶體邊界

4.忘記釋放記憶體,造成記憶體洩露

5.釋放了記憶體卻繼續使用,需用free或delete釋放記憶體後立即將指標設定為null,防止產生"野指標".

new和malloc的區別

1 new 是c 中的操作符,malloc是c 中的乙個函式 2 new 不止是分配記憶體,而且會呼叫類的建構函式,同理delete會呼叫類的析構函式,而malloc則只分配記憶體,不會進行初始化類成員的工作,同樣free也不會呼叫析構函式 3 記憶體洩漏對於malloc或者new都可以檢查出來的,...

malloc和new的區別

1,malloc與free是c c語言的標準庫函式,new delete是c 的運算子。它們都可用於申請動態記憶體和釋放記憶體。2,對於非內部資料型別的物件而言,光用maloc free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc f...

new和malloc的區別

1.malloc 函式 1.1 malloc的全稱是memory allocation,中文叫動態記憶體分配。原型 extern void malloc unsigned int num bytes 說明 分配長度為num bytes位元組的記憶體塊。如果分配成功則返回指向被分配記憶體的指標,分配失...