1. 程式人生 > >懸空指標(Dangling pointer)避免方法

懸空指標(Dangling pointer)避免方法

什麼是懸空指標?

一個指標所指的記憶體被釋放後,這個指標就被懸空了。

懸空指標的危害?

訪問懸空指標,結果隨機。可能導致程式功能不正常,也可能導致程式崩潰。如果受到影響的是其它功能,問題通常很難定位。

如何避免懸空指標?

基本思路:在釋放一塊記憶體時,將指向這塊記憶體的指標變數設定為NULL。訪問指標變數前,先判斷是否為NULL。

進階:當有多個指標變數都指向同一塊記憶體時,釋放這塊記憶體時,需要將所有指標變數的值都置為NULL,這需要維護所有指向這塊記憶體的指標變數的資訊,但是這種方式開銷大,所以通常很少使用。使用頻率不是非常高的物件,可以在使用前先根據id等索引查詢,如果找不到,則不要使用。如果有使用者時,不能釋放這塊記憶體,我們可以使用引用計數,只有當引用計數為0時,才真正釋放記憶體,否則,只是引用計數減1。