C 中野指標和空指標和無型別指標

2021-08-22 14:43:16 字數 1137 閱讀 8588

一. 野指標

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

產生野指標三個原因:

(1)指標變數建立時候沒有被初始化:任何指標變數在建立的時候,不會自動成為null指標,它的預設值是隨機的,因此該指標就會成為乙個野指標,可能指向一塊不可使用的記憶體空間。

例如char *p;  這樣建立乙個指標p,指向乙個隨機的記憶體位址空間

所以指標在建立的時候要被初始化,可以講其初始化為null,或指向合法的記憶體空間

比如 char *p = null ; 或 char *p = new char; //這個時候p就不會是乙個野指標

(2)delete或free指標之後沒有把指標設定為null:delete和free只是把指標所指的記憶體空間釋放掉,而沒有對指標本身進行釋放。

比如char *p = new char(4) ; 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

p = (int *)gp;   //把無型別指標轉換為整型指標

printf("%d\n", *p);

結果輸出3,說明無型別指標可以轉換成任何資料型別的指標。

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

一.野指標 所謂的野指標指的是乙個指標變數指向了不可使用的記憶體空間。產生野指標三個原因 1 指標變數建立時候沒有被初始化 任何指標變數在建立的時候,不會自動成為null指標,它的預設值是隨機的,因此該指標就會成為乙個野指標,可能指向一塊不可使用的記憶體空間。例如char p 這樣建立乙個指標p,指...

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

野指標 指向 不可預知。這個 野指標 指向的記憶體空間,可能是某個重要的資料或其它程式,甚至是系統的重要記憶體位置.再次訪問時造成的危害是不可預知的 容易被病毒或黑客攻擊.在這個 野指標 指向的記憶體中放點 東西 你使用這個 野指標 時,自然中招.避免方法 1.建立乙個指標時,位址指向明確位址或者n...

c 空指標和野指標

野指標不同於空指標,空指標是指乙個指標的值為null,而野指標的值並不為null,野指標會指向一段實際的記憶體,只是它指向 我們並不知情,或者是它所指向的記憶體空間已經被釋放,所以在實際使用的過程中,我們並不能通過指標判空去識別乙個指標是否為野指標。野指標可能指向乙個可用的,但是正在被使用的空間,如...