如果A指向B,B指向C,free(A),再宣告D指向B,B這時是不是被釋放了?
作者:由 知乎使用者dwTe40 發表于 體育時間:2017-05-13
首先,如果你使用free(a),你必須要確保a是malloc出來的而不是new出來的,其次,你在釋放的時候,並不會把指標清零,僅僅是把堆記憶體釋放,我們都一般要在delete後面手動將指標設定為nullptr。
你看看程式碼裡是不是用了智慧指標,它是不是在析構的時候做了一些無法描述之事,或者你自己做了這樣的事情。
new和delete一起用
malloc和free一起用
同一塊記憶體區域。。釋放就是野指標了。。
是。這種叫dangling pointer
A->B說明A代表B的地址。B->C說明B代表C的地址。free(A) A=NULL,A所指向的記憶體(記憶體中存放的是B的地址)就沒有指標指向它了,既然沒有指標指向它,就說明我們找不到它了。所以,在宣告D指向B(想讓D代表B的地址),但是我們已經找不到B的地址了,所以會報錯。