空指標與野指標

2022-03-16 03:31:15 字數 766 閱讀 2901

「野指標」不是null指標,是指向「垃圾」記憶體的指標。人們一般不會錯用null指標,因為用if語句很容易判斷。但是「野指標」是很危險的,if語句對它不起作用。野指標的成因主要有兩種:

一、指標變數沒有被初始化。任何指標變數剛被建立時不會自動成為null指標,它的預設值是隨機的,它會亂指一氣。所以,指標變數在建立的同時應當被初始化,要麼將指標設定為null,要麼讓它指向合法的記憶體。

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

當delete/free乙個指標後,沒有將其置空,則變為野指標.如果刪除乙個指標後再刪除,程式就會變得特別不穩定,但如果刪除的是乙個空指標則非常安全.

乙個不錯的例子

c/c++code

char *p = (char *) malloc(100

);strcpy(p, 「hello」);

free(p);

//p 所指的記憶體被釋放,但是p所指的位址仍然不變

if(p != null) //

沒有起到防錯作用

strcpy(p, 「world」); //

出錯

野指標為定義了沒有初始化或者刪除之後沒有賦值為null,野指標有指向記憶體,空指標不會指向記憶體。

空指標與野指標

首先什麼是空型別呢,空型別就是void,自然,空型別指標就是void void 可以指向任何型別物件的位址,表示這是乙個指標,和位址值有關,但不知道儲存在此位址上的物件的型別,所以在取空型別指標所指向的值的時候,應將空型別指標轉換為對應的指標型別 int a 10 char b a float c ...

野指標與空指標

一 空指標 空指標不指向任何物件,在檢視使用乙個指標之前可以首先檢查它是否為空。定義空指標 1 int p1 nullptr 等價於int p1 0 2int p2 0 直接將p2初始化為字母常量034 要包含 include 5 int p3 null 等價於int p3 0 1 null 在c中...

指標,野指標,空指標,賦值?

bug中最可怕的是野指標,那麼問題來了,野指標是什麼?是如何產生的?為什麼程式設計師會 忘記 昨天除錯時,我發現了乙個野指標,由此我明白了。a的值成了亂碼,而且gcc編譯器並沒有報錯,那麼請看下面的 那麼我們假設a是指標,一旦我們如同該 一般不讓a指向元素的話,編譯器 必然是會報錯的,那麼我們不如假...