一. 野指標
所謂的野指標指的是乙個指標變數指向了不可使用的記憶體空間。
產生野指標三個原因:
(1)指標變數建立時候沒有被初始化:任何指標變數在建立的時候,不會自動成為null指標,它的預設值是隨機的,因此該指標就會成為乙個野指標,可能指向一塊不可使用的記憶體空間。
例如char *p; 這樣建立乙個指標p,指向乙個隨機的記憶體位址空間
所以指標在建立的時候要被初始化,可以講其初始化為null,或指向合法的記憶體空間
比如 char *p = null ; 或 char *p = new char; //這個時候p就不會是乙個野指標
(2)delete或free指標之後沒有把指標設定為null:delete和free只是把指標所指的記憶體空間釋放掉,而沒有對指標本身進行釋放。
比如char *p = new char; delete p; //這時候指標p所指的記憶體空間被釋放,但是指標p本身不為空,但是指標p所指向的記憶體空間已經不能使用,造成了野指標。正確的做法是及時的把指標p賦值為null
例如下面這個程式
char *p = (char *)malloc(100);
strcpy(p, "hello");
free(p);
if(p != null){
printf("not null\n");
結果輸出」not null「,驗證上面的結論,應該在free之後馬上把p = null。
(3)指標操作超過了指向記憶體空間的作用範圍:當指標越界之後也會變成乙個野指標
二. 空指標
空指標是一種特殊的指標,表示當前這個指標變數處於空閒狀態,沒有指向任何有意義的記憶體空間。
c++中用null來表示空指標,null是乙個符號常量值為0。
三. 無型別指標
無型別指標指的是void *這種指標,表示可以指向任何資料型別。
比如int n = 3;
int *p = null; //說明指標p此時空閒,沒有指向任何有意義的記憶體空間,空指標
void *gp = &n; //正確,無型別指標gp指向整型變數n
int *m=gp; //錯誤,不能用乙個確定型別的指標指向無型別指標
p = (int *)gp; //把無型別指標轉換為整型指標
printf("%d\n", *p);
結果輸出3,說明無型別指標可以轉換成任何資料型別的指標。
空指標 野指標和無型別指標
野指標 指向 不可預知。這個 野指標 指向的記憶體空間,可能是某個重要的資料或其它程式,甚至是系統的重要記憶體位置.再次訪問時造成的危害是不可預知的 容易被病毒或黑客攻擊.在這個 野指標 指向的記憶體中放點 東西 你使用這個 野指標 時,自然中招.避免方法 1.建立乙個指標時,位址指向明確位址或者n...
C 中野指標和空指標和無型別指標
一.野指標 所謂的野指標指的是乙個指標變數指向了不可使用的記憶體空間。產生野指標三個原因 1 指標變數建立時候沒有被初始化 任何指標變數在建立的時候,不會自動成為null指標,它的預設值是隨機的,因此該指標就會成為乙個野指標,可能指向一塊不可使用的記憶體空間。例如char p 這樣建立乙個指標p,指...
空指標和野指標
關於多次free 出現的野指標的原因 指標變數和指標變數所指的記憶體空間變數是兩個不同的概念 free 最主要釋放的指標變數所指的記憶體空間,因為記憶體資源是有限的,很寶貴,需要 利用 但是指標變數本身的值還是之前的指向,未重置成null 所以再次釋放的時候,指向了未知的記憶體區域,產生野指標 避免...