野指針

野指針,也就是指向不可用內存區域的指針。通常對這種指針進行操作的話,將會使程序發生不可預知的錯誤。
“野指針”不是NULL指針,是指向“垃圾”內存的指針。人們一般不會錯用NULL指針,因爲用if語句很容易判斷。但是“野指針”是很危險的,if語句對它不起作用。野指針的成因主要有兩種:

一、指針變量沒有被初始化。任何指針變量剛被創建時不會自動成爲NULL指針,它的缺省值是隨機的,它會亂指一氣。所以,指針變量在創建的同時應當被初始化,要麼將指針設置爲NULL,要麼讓它指向合法的內存。

二、指針p被free或者delete之後,沒有置爲NULL,讓人誤以爲p是個合法的指針。別看free和delete的名字惡狠狠的(尤其是 delete),它們只是把指針所指的內存給釋放掉,但並沒有把指針本身幹掉。通常會用語句if (p != NULL)進行防錯處理。很遺憾,此時if語句起不到防錯作用,因爲即便p不是NULL指針,它也不指向合法的內存塊。例:

char *p = (char *) malloc(100);

strcpy(p, “hello”);

free(p); // p 所指的內存被釋放,但是p所指的地址仍然不變

if(p != NULL) // 沒有起到防錯作用

strcpy(p, “world”); // 出錯

另外一個要注意的問題:不要返回指向棧內存的指針或引用,因爲棧內存在函數結束時會被釋放。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章