眾所周知,最開始我們用new來創建一個指針,那麼等我們用完它之後,一定要用delete將該指針刪掉。但是,值得注意的是,難道就僅僅是刪除這個指針這麼簡單的麼?下面,我們用一個程序來說明這個問題:
#include
02
using namespace std;
03
int main()
04
{
05
int *p=new int;
06
*p=3;
07
cout<<"將3賦給p的地址後,指針p讀取的值:"<<*p<<endl;
08
delete p;
09
cout<<"刪除空間後,指針p讀取的值:"<<*p<<endl;
10
long *p1=new long;
11
*p1=100;
12
cout<<"創建新空間後,指針p中保存的地址:"<<p<<endl;
13
cout<<"指向新空間的指針p1保存的地址:"<<p1<<endl;
14
*p=23;
15
cout<<"將23賦給p的地址後,指針p讀取的值:"<<*p<<endl;
16
cout<<"將23賦給p的地址後,指針p1讀取的值:"<<*p1<<endl;
17
delete p1;
18
return 0;
19
}
在上面這個程序中,我們在第8行就將指針p利用delete刪掉了。但是,我們來看看程序的輸出結果:
對照著上面的程序,我們來分析一下這個輸出。首先,我們在程序的第5行初始化了一個指針p。之後輸出指針p讀取的值。由於第6行的原因,程序肯定會輸出3 了。之後,我們在程序的第8行刪除了這個指針p。但是我們驚奇的發現,在程序的第9行竟然可以輸出指針p讀取的值。我們不是已經把它刪了麼?其實不 然,debug,上圖: