c語言中的malloc

2021-06-15 10:09:28 字數 1065 閱讀 3805

今天想去練習一下二叉樹的使用的,使用前就必須要建立乙個二叉樹啊。我用的是前序式的建立方法,都是通過呼叫子函式createtree來建立乙個樹(先建立根->左孩子->右孩子),是通過遞迴的方法的。但是當我測試的時候,每次訪問樹根的都會出錯,原來建立的二叉樹根本就沒有儲存在主函式的head中,我用單步除錯發現malloc有問題,沒有達到我想要的效果。我是知道malloc在程序結束前都不會自動free掉malloc分配的記憶體的,那為什麼我申請的記憶體卻沒有返回到主函式中呢?

#include

#include

typedef struct _tree

bittree;

int createtree(bittree *head)

else

return 1;

}int main()

上面是錯誤的**的,出錯的地方是在函式呼叫的時候我傳的是*head ,我的最大的失誤就是以為傳的是指標,在子函式中修改什麼都能儲存的。而忘記了只是修改指標指向的位址單元被修改了才會被儲存,而起傳遞的指標本身被修改時不會被儲存的,因為傳的指標本身就是相當於值傳參,而不是傳位址。因此若要想儲存在子函式中malloc中的指標就必須要使用乙個指標來儲存,而在子函式想儲存指標當然使用的是指標的指標的(當然也可以將指標返回也是可以的)。因此該**想要正確的話就必須傳的是&head,而不是head這麼簡單了。正確的**是

#include

#include

typedefstruct_tree

bittree;

intcreatetree(bittree **head)

return1;

}

intmain()

C語言中malloc函式實現

該實現使用大容量的靜態陣列作為堆,但也可使用作業系統呼叫分配堆。定義了乙個資料型別header儲存每個儲存器塊的簿記資訊,定義了具有header型別元素的堆陣列,這樣就可以很容易地將簿記資訊儲存在儲存器塊中。型別header包含了3塊資訊 指向列表的下乙個塊的指標,當前分配空間的長度,後面的自由空間...

C語言中 malloc函式用法

一 malloc 和free 的基本概念以及基本用法 1 函式原型及說明 void malloc long numbytes 該函式分配了numbytes個位元組,並返回了指向這塊記憶體的指標。如果分配失敗,則返回乙個空指標 null 關於分配失敗的原因,應該有多種,比如說空間不足就是一種。void...

C語言中的malloc和free

最近在研究php自定義函式的實現,其中php自定義函式在傳遞引數時,是放到人為的乙個棧中,這個跟寫c程式時,引數入棧的這個棧還不一樣,其中延伸到了 malloc 以及free 有人說在free p 後,要將p設定為null,在查詢了一翻資料後,大體上弄明白了是怎麼回事 malloc是向os要一塊記憶...