空指針和迷途指針的區別

解釋代碼:

#include <iostream.h>
int main(){
 int *pInt = new int;
 *pInt=10;
 cout<<*pInt<<endl;
 delete pInt;
 pInt=0;

 *pInt=20;    // oh no, this was deleled.
 cout<<*pInt<<endl;
 return 0;
}
//Compile this program successfully,but when running it, collapse.

迷途指針也叫懸浮指針,失控指針,是對一個指針delete後---這樣會釋放它所指向的內存---並沒有把它設置爲空時產生的.而後,如果你沒有賦值就試圖再次使用該指針,引起的結果是不可預料的.

當delete一個指針時,實際上僅是讓編譯器釋放內存,但指針本身依然存在。這時它就是一個迷途指針。

當使用以下語句時,可以把迷途指針改爲空指針:

MyPtr=0;

通常,如果在刪除一個指針後又把它刪除了一次,程序就會變得非常不穩定,任何情況都有可能發生。但是如果你只是刪除了一個空指針,則什麼事都不會發生,這樣做非常安全。

使用迷途指針或空指針(如MyPtr=0)是非法的,而且有可能造成程序崩潰。如果指針是空指針,儘管同樣是崩潰,但它同迷途指針造成的崩潰相比是一種可預料的崩潰。這樣調試起來會方便的多。  

發佈了30 篇原創文章 · 獲贊 2 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章