C語言中的malloc和free

2022-03-10 22:53:26 字數 560 閱讀 8923

最近在研究php自定義函式的實現,其中php自定義函式在傳遞引數時,是放到人為的乙個棧中,這個跟寫c程式時,引數入棧的這個棧還不一樣,其中延伸到了 malloc 以及free

有人說在free(p)後,要將p設定為null, 在查詢了一翻資料後,大體上弄明白了是怎麼回事

malloc是向os要一塊記憶體,在os中會用乙個鍊錶,將空閒的記憶體位址組織起來,當申請記憶體時,os會煉表中取出相應大小的記憶體給申請者

例如

int *p=nuill;

p=(int *) malloc(4); //p指向的記憶體位址 假設為:0x005

free 釋放記憶體 , 將這個記憶體重新放到上面的鍊錶中,記憶體裡的內容不一定被清空,可能下次分配給另乙個申請者後,會被覆蓋

free(p); //執行free函式後,p的值仍為0x005,只不過這塊記憶體已經被被打上可再次使用的標記**了,再次使用會提示 非法操作 ,

p=null; //將p的值設定為null

參考這裡 , 為什麼 free的時候只傳乙個位址,就能將我們分配的那段記憶體置為可再次使用,見這裡

c語言中的malloc

今天想去練習一下二叉樹的使用的,使用前就必須要建立乙個二叉樹啊。我用的是前序式的建立方法,都是通過呼叫子函式createtree來建立乙個樹 先建立根 左孩子 右孩子 是通過遞迴的方法的。但是當我測試的時候,每次訪問樹根的都會出錯,原來建立的二叉樹根本就沒有儲存在主函式的head中,我用單步除錯發現...

c語言中calloc函式和malloc函式

1 void calloc unsigned int num,unsigned int size 記憶體的動態儲存區中分配num個長度為size的連續空間,返回所分配的記憶體空間的首位址 如果分配失敗,返回null。2 void malloc unsigned int size 動態分配記憶體 si...

C語言中的malloc和free造成記憶體洩露?

首先,說一下我對記憶體洩露的理解,記憶體洩露是指 程式中一塊不再使用的記憶體沒有被釋放,造成記憶體保持占用狀態,使作業系統不能將記憶體分配給其它的程式 程序 在c語言,用的最多的管理記憶體的函式莫過於malloc和free了,下面我用vc6.0做了乙個小測試,原始碼如下 然後,使用vc6.0來除錯這...