野指標,空指標和無型別指標

2021-08-15 05:12:58 字數 1183 閱讀 1378

一. 野指標

所謂的野指標指的是乙個指標變數指向了不可使用的記憶體空間。

產生野指標三個原因:

(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 所以再次釋放的時候,指向了未知的記憶體區域,產生野指標 避免...