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