您當前的位置:首頁 > 體育

如果A指向B,B指向C,free(A),再宣告D指向B,B這時是不是被釋放了?

作者:由 知乎使用者dwTe40 發表于 體育時間:2017-05-13

如果A指向B,B指向C,free(A),再宣告D指向B,B這時是不是被釋放了?知乎使用者2017-05-13 10:17:28

首先,如果你使用free(a),你必須要確保a是malloc出來的而不是new出來的,其次,你在釋放的時候,並不會把指標清零,僅僅是把堆記憶體釋放,我們都一般要在delete後面手動將指標設定為nullptr。

你看看程式碼裡是不是用了智慧指標,它是不是在析構的時候做了一些無法描述之事,或者你自己做了這樣的事情。

如果A指向B,B指向C,free(A),再宣告D指向B,B這時是不是被釋放了?destination2017-05-13 10:28:19

new和delete一起用

malloc和free一起用

如果A指向B,B指向C,free(A),再宣告D指向B,B這時是不是被釋放了?大熊哥哥2017-05-13 12:08:18

同一塊記憶體區域。。釋放就是野指標了。。

如果A指向B,B指向C,free(A),再宣告D指向B,B這時是不是被釋放了?Matt Yang2017-05-13 13:45:52

是。這種叫dangling pointer

如果A指向B,B指向C,free(A),再宣告D指向B,B這時是不是被釋放了?Zzzzzz2017-05-15 16:37:46

A->B說明A代表B的地址。B->C說明B代表C的地址。free(A) A=NULL,A所指向的記憶體(記憶體中存放的是B的地址)就沒有指標指向它了,既然沒有指標指向它,就說明我們找不到它了。所以,在宣告D指向B(想讓D代表B的地址),但是我們已經找不到B的地址了,所以會報錯。

標簽: 指標  地址  free  指向  記憶體