記憶體分配的兩種方法

2021-08-17 07:11:58 字數 514 閱讀 4357

我們都知道記憶體分配有兩種方法: new和malloc。他們有哪些相同點和不同點呢?

一,new是系統api函式,而malloc是庫函式也即意味著在程式中呼叫malloc函式需要載入malloc.h標頭檔案才能使用。

二,new建立的物件除分配記憶體外,還會呼叫型別的建構函式,同理delete會呼叫析構函式。如果用new賦值的指標,用free釋放將有可能導致析構函式沒有呼叫,一些變數內部生成的變數指標不能釋放的問題出現。而用delete釋放malloc的記憶體,將會由於缺少對型別本身的構造而直接析構的危險性。例如在乙個型別在建構函式中用new為某個指標指定了記憶體,而在該型別的析構函式中釋放了該指標指向的記憶體。

struct mydata

~mydata()}};

int main()

如果採用new -free組合,那麼這個型別中的該指標指向的指標將不會被釋放,而出現記憶體洩露。如果採用malloc -delete組合,將會出現沒有為指標分配記憶體而直接釋放的錯誤。

LCA兩種方法

lca least common ancestors 即最近公共祖先,是指在有根樹中,找出某兩個結點u和v最近的公共祖先。模板題 anc i j 表示第i個點的2 j的祖先的標號 整個過程就是兩個點往上跳到同一深度,再一起往上跳找到lca include include using namespac...

post get 兩種方法

a.定義乙個get函式 get url,headers none defget url,headers none return urlrequests url,headers headers 內部可以呼叫urlrequests 如果不寫headers headers會被預設為none b.定義乙個p...

popup的兩種方法

1,popup var pop function window.onload function aaa function closediv 2,div var divtop,divleft,divwidth,divheight,docheight,docwidth,objtimer,i 0 var ...