什么是野指針?
??????一個(gè)母親有兩個(gè)小孩(兩個(gè)指針),一個(gè)在廚房,一個(gè)在臥室,(屬于不同的代碼塊,其生存期不同)母親讓在廚房的小孩帶一塊蛋糕(指針指向的對(duì)象)給在臥室的小孩,這樣在臥室的孩子才肯寫(xiě)作業(yè)。但這個(gè)在廚房的小孩比較淘氣,他在走出廚房時(shí)自己將蛋糕吃了,沒(méi)能帶出來(lái)。而在臥室的沒(méi)有吃到蛋糕,所以不肯完成他的作業(yè)。結(jié)果母親卻不知道臥室的孩子沒(méi)有吃到蛋糕,還以為作業(yè)完了。結(jié)果第二天她就被老師召喚到辦公室了。事情麻煩了。 這樣,那個(gè)在臥室的孩子就是野指針了,因?yàn)樗麤](méi)有得到應(yīng)得的蛋糕,不能完成母親交給他的作業(yè)。
?
??????野指針是指那些你已經(jīng)釋放掉的內(nèi)存指針。當(dāng)你調(diào)用free(p)時(shí),你真正清楚這個(gè)動(dòng)作背后的內(nèi)容嗎?你會(huì)說(shuō)p指向的內(nèi)存被釋放了。沒(méi)錯(cuò),p本身有變化嗎?答案是p本身沒(méi)有變化。它指向的內(nèi)存仍然是有效的,你繼續(xù)讀寫(xiě)p指向的內(nèi)存,沒(méi)有人能攔得住你。??
??????釋放掉的內(nèi)存會(huì)被內(nèi)存管理器重新分配,此時(shí),野指針指向的內(nèi)存已經(jīng)被賦予新的意義。對(duì)野指針指向內(nèi)存的訪問(wèn),無(wú)論是有意還是無(wú)意的,都為此會(huì)付出巨大代價(jià),因?yàn)樗斐傻暮蠊缤浇缭L問(wèn)一樣是不可預(yù)料的。?
??????
釋放內(nèi)存后立即把對(duì)應(yīng)指針置為空值,這是避免野指針常用的方法。這個(gè)方法簡(jiǎn)單有效,只是要注意,當(dāng)然指針是從函數(shù)外層傳入的時(shí),在函數(shù)內(nèi)把指針置為空值,對(duì)外層的指針沒(méi)有影響。比如,你在析構(gòu)函數(shù)里把this指針置為空值,沒(méi)有任何效果,這時(shí)應(yīng)該在函數(shù)外層把指針置為空值。
posted on 2006-11-13 09:48
喬棟 閱讀(337)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
C++的健身房