自引用結構兼談Malloc和Free函式

2021-09-30 06:30:07 字數 1002 閱讀 9935

一、自引用結構

1、 什麼事自引用結構?

自引用結構(self-referential structure)是一種特殊的結構。主要特徵:乙個或多個自身的變數是指向自身的指標。

2. 判斷幾個自引用結構是否合法?

這個結構是非法的,為什麼呢?結構裡面有包含b,b裡面有包含自己的成員b,這樣就會無休止的迴圈下去。

編譯器在結構的長度確定之前,就已經知道指標的長度,所以這樣自引用是合法的。

二、malloc和free函式

自引用結構的記憶體分配和使用主要是通過動態儲存管理程式(malloc和free)來顯式的分配和釋放記憶體。

1. malloc函式原型

該函式分配了numbytes個位元組,並返回了指向這塊記憶體的指標。如果分配失敗,則返回乙個空指標(null)。

2. free函式原型

該函式是將之前用malloc分配的空間還給程式或者是作業系統,也就是釋放了這塊記憶體,讓它重新得到自由。

3.函式的用法

4. 注意點

申請了記憶體空間後,必須檢查是否分配成功。

當不需要再使用申請的記憶體時,記得釋放。

雖然malloc()函式的型別是(void *),任何型別的指標都可以轉換成(void *),但是最好還是在前面進行強制型別轉換,因為這樣可以躲過一

些編譯器的檢查。

5.深入發掘

malloc()到底從**得到了記憶體空間?

從堆裡面獲得空間。也就是說函式返回的指標是指向堆裡面的一塊記憶體。作業系統中有乙個記錄空閒記憶體位址的鍊錶。當作業系統收到程式的申請 時,就會遍歷該鍊錶,然後就尋找第乙個空間大於所申請空間的堆結點,然後就將該結點從空閒結點鍊錶中刪除,並將該結點的空間分配給程式

free()到底釋放了什麼?

free()釋放的是指標指向的記憶體!注意!釋放的是記憶體,不是指標!

參考文獻:

1/ 網路文章:

2/ fundamentals of data structures in c

3/ poninter on c

C語言中結構體 自引用 和 相互引用

technorati 標籤 c語言,結構體,自引用,相互引用,self reference,mutual reference 結構體的自引用 self reference 就是在結構體內部,包含指向自身型別結構體的指標。結構體的相互引用 mutual reference 就是說在多個結構體中,都包含...

C語言中結構體 自引用 和 相互引用

結構體的自引用 self reference 就是在結構體內部,包含指向自身型別結構體的指標。結構體的相互引用 mutual reference 就是說在多個結構體中,都包含指向其他結構體的指標。1.1 不使用typedef時 錯誤的方式 1 struct tag 1 這種宣告是錯誤的,因為這種宣告...

C語言中結構體 自引用 和 相互引用

結構體的自引用 self reference 就是在結構體內部,包含指向自身型別結構體的指標。結構體的相互引用 mutual reference 就是說在多個結構體中,都包含指向其他結構體的指標。1.1 不使用typedef時 錯誤的方式 1 struct tag 1 這種宣告是錯誤的,因為這種宣告...