free()函數的理解


free的實現原理:

操作系統在調用malloc函數時,會默認在malloc分配的物理內存前面分配一個數據結構,這個數據結構記錄了這次分配內存的大小,在用戶眼中這個操作是透明的。

那么當用戶需要free時,free函數會把指針退回到這個結構體中,找到該內存的大小,這樣就可以正確的釋放內存了。

 

通過這種內存分配機制,可以解釋很多c語言中的迷惑問題:

1)用戶已經free了一段內存,為什么還可以調用該指針,並且編譯器不報錯?

因為,free函數的作用只是告訴操作系統該內存不用了,可以收回,操作系統就把該內存鏈接到鏈接表上,

但是這段內存用戶還是可以訪問到的,只是該內存的值可能已經發生了變化,這種情況也叫作野指針。

解決辦法就是,在free后,把該指針指向NULL。        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM