C/C++ 使用delete刪除指標需小心 “野指標”
本文轉載自:
眾所周知,最開始我們用new來建立一個指標,那麼等我們用完它之後,一定要用delete將該指標刪掉。但是,值得注意的是,難道就僅僅是刪除這個指標這麼簡單的麼?下面,我們用一個程式來說明這個問題:
#include |
02 |
using |
03 |
int |
04 | { |
05 |
int |
06 |
|
07 |
|
08 |
delete |
09 |
|
10 |
long |
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
delete |
18 |
return |
19 | } |
從監視視窗中,我們可以看見雖然程式的第8行已經將指標p刪除了,但是在監視視窗中p仍然存在,只是*p所指向的值不再是原來的3了,而是一個隨機數。這裡就說明了一個非常重要的概念:我們在刪除一個指標之後,編譯器只會釋放該指標所指向的記憶體空間,而不會刪除這個指標本身。
在刪除一個指標之後,一定將該指標設定成空指標(即在delete *p之後一定要加上: p=NULL)