free的實現原理:
操作系統在調用malloc函數時,會默認在malloc分配的物理內存前面分配一個數據結構,這個數據結構記錄了這次分配內存的大小,在用戶眼中這個操作是透明的。
那么當用戶需要free時,free函數會把指針退回到這個結構體中,找到該內存的大小,這樣就可以正確的釋放內存了。
通過這種內存分配機制,可以解釋很多c語言中的迷惑問題:
1)用戶已經free了一段內存,為什么還可以調用該指針,並且編譯器不報錯?
因為,free函數的作用只是告訴操作系統該內存不用了,可以收回,操作系統就把該內存鏈接到鏈接表上,
但是這段內存用戶還是可以訪問到的,只是該內存的值可能已經發生了變化,這種情況也叫作野指針。
解決辦法就是,在free后,把該指針指向NULL。
