C語言野指標就是未初始化的指標麼

2022-09-10 12:40:33 字數 3797 閱讀 9908

1樓:_何聰輝

未初始化的指標可以稱為野指標(wild pointer),但是野指標並不僅僅是未初始化的指標. 一般來說,野指標(dangling pointer, wild pointer)指向的是記憶體中無效的物件, 這樣說可能很抽象, 比如以下幾個例子.

1. 如果有一段**如下

char *dp = null;

/* c falls out of scope */

當程式走出大括號作用域後, 變數c的記憶體(在棧中)被系統**,但是dp仍讓指向那塊記憶體,這塊記憶體今後很有可能被系統用作其他用途,此時如果*dp,dp指向的內容將不會是你期待的內容,此處,dp可以稱為野指標.

2. 第二種情況是使用者自己分配記憶體,然後自己釋放記憶體,釋放記憶體後仍然引用指標指向的內容, 比如

#include

void func()

在執行完free(dp)後,dp是一個野指標,因為他指向的記憶體已經被釋放掉了,系統可能會把這段記憶體用於其他地方.這個時候,常用的一種做法是把這個指標設為null, 設為null的指標可以由程式設計師使用if (dp == null)語句堅持出來, 但是野指標無法監測.

3. 另外一種情況是指標指向函式中分配的棧記憶體,函式返回後,記憶體被**,但是指標指向的地址沒有改變,因此這個指標也是野指標.比如

int *func(void)

從以上三點可以總結出, 野指標其實就是就像一段無效的記憶體(被系統**), 但是這個指標的值並不是null, 因此如果沒有立刻把這個指標賦其他有效值,或者null值, 以後再次引用野指標就會出現segmentation faults這樣的錯誤

2樓:

野指標是指你分配記憶體後並且也釋放了的,但是沒有將指標置為null的指標俗稱野指標。

3樓:滿爽

野指標是指指向垃圾記憶體的指標,未初始化只是其中一種而已,還有就是malloc分配記憶體的指標未釋放,越過了變數的作用範圍。大概就這三種。

4樓:apple林

可以你new的指標,但是沒有free

c語言指標使用前必須初始化??

5樓:匿名使用者

指標申明的時候最好初始化。。初始化以後的指標在一些操作下野會變成野指標,比如:free釋放記憶體以後。。指向被釋放的記憶體的指標也是野指標。。

我理解的野指標就是不可控的,不確定指向的指標都是野指標。

6樓:匿名使用者

指向null就行了。沒有初始化的話,系統會隨機給它分配內容,即隨機指向一塊記憶體,在使用不當的情況下很可能造成一系列問題

7樓:中國洪康

=null初始化 野指標指的是被new出來的指標, 但是沒有delete掉,停留在記憶體裡,有可能印製記憶體崩潰的

8樓:匿名使用者

指向某一變數的地址

比如int b=12,*a=&b;

9樓:匿名使用者

最好初始化

一般都是

p = null;

c語言,空指標,野指標,通用指標

10樓:瘦死的小駱駝

空指標:空指標是一個特殊的指標值,也是唯一一個對任何指標型別都合法的指標值。指標變數具有空指標值,表示它當時處於閒置狀態,沒有指向有意義的東西。

通用指標:通用指標,它可以指向任何型別的變數。通用指標的型別用(void *)表示,因此也稱為void 指標。

野指標:野指標也就是指向不可用記憶體區域的指標。通常對這種指標進行操作的話,將會使程式發生不可預知的錯誤。

空指標是一個特殊的指標值,也是唯一一個對任何指標型別都合法的指標值。指標變數具有空指標值,表示它當時處於閒置狀態,沒有指向有意義的東西。空指標用0表示,c語言保證這個值不會是任何物件的地址。

給指標值賦零則使它不再指向任何有意義的東西。為了提高程式的可讀性,標準庫定義了一個與0等價的符號常量null.    程式裡可以寫 p = 0;     或者 p = null; 兩種寫法都把p置為空指標值。

相對而言,前一種寫法更容易使讀程式的人意識到這裡是一個指標賦值。我們印象中c語言的指標都有型別,實際上也存在一種例外。

這裡涉及到通用指標,它可以指向任何型別的變數。通用指標的型別用(void *)表示,因此也稱為void 指標。

野指標,也就是指向不可用記憶體區域的指標。通常對這種指標進行操作的話,將會使程式發生不可預知的錯誤。

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

野指標的成因主要有兩種:

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

②指標p被free或者delete之後,沒有置為null,讓人誤以為p是個合法的指標。別看free和delete的名字惡狠狠的(尤其是delete),它們只是把指標所指的記憶體給釋放掉,但並沒有把指標本身幹掉。通常會用語句if (p !

= null)進行防錯處理。很遺憾,此時if語句起不到防錯作用,因為即便p不是null指標,它也不指向合法的記憶體塊。

11樓:匿名使用者

野指標就是不知道指向**,或者說不知道指向的記憶體是否可以使用,一般都是剛剛宣告但沒有初始化的指標。

空指標不是指向常數0,只指向地址0,即null,其實換句話說,指標的本質就是地址嘛,空指標就是指標本身的值(地址)為0

空指標的作用是防止野指標的出現,因為我們不能知道野指標到底指向**,所以我們也無法判斷一個指標是否是野指標,這樣很危險,但如果養成將指標初始化為空指標的習慣,我們就能判斷出這個指標是不是有效的(判斷是不是null就可以了)

通用指標一般都用在函式傳參,實現所謂的「多型」,但到函式裡面使用時,一般還是被轉換成具體型別的指標。

12樓:匿名使用者

首先空指標並不是指向0的指標,空指標是什麼,就是一個被賦值為0的指標,在沒有被具體初始化之前,其值為0.

所以指標沒有指向常數0,它指向的儲存空間是null,暫時為0.

c語言 未初始化的指標與指標陣列的問題

13樓:匿名使用者

int* p 是定義了一個指標變數,變數沒有初始化的話,是不可以引用的,但是定義指標陣列時(把*去掉也可以的),就已經給這個陣列分配了一個地址(p[0]的地址)和相應的記憶體(由型別和元素多少決定)。至於為什麼地址一樣,舉個例子,你定義兩個字串指標,指標指向的是同一串字元,你會發現兩個指標的地址也相同。應該能幫你解決一部分問題,地址一樣的問題我也是半懂,抱歉。

迷途指標是不是就是野指標?什麼是野指標

14樓:奶薩

野指標就是宣告而沒有初始化的指標,指標變數中存的地址可能是任何垃圾數值,這就叫野指標。

迷途指標是正常的指標指向的物件被釋放了,比如malloc分配的堆中的記憶體,或者棧中函式分配的臨時變數,一旦你的指標與這些物件斷連,這時這個就叫迷途指標

野指標指向不確定,使用未初始化的指標很危險。

迷途指標指向被釋放,再次使用將會造成段錯誤或者資料保護錯誤,也很危險。

c語言野指標和指標空懸的區別是什麼

15樓:

野指標是指標宣告瞭指標變數後沒有初始化,其中的資料是機器垃圾值;指標空懸是指這個指標正常使用過,但指向的目標在程式流程中已經消失了,沒有將及時將該指標置為無效(即==null)。

指向類指標如何初始化,如何初始化一個指標陣列

需要定義一個類,然後再把類指標指向這個類的地址,也可以初始化為null,但是null指標只能呼叫不涉及類成員變數的類成員函式。示例 include using namespace std class test int get test a 1 b 2 public int a,b int main ...

c語言 指標函式跟函式指標的區別

指標函式是個函式,其返回值是指標 函式指標是一個指標,指向函式的入口地址 典型的指標函式如 void malloc unsigned int size 這個記憶體分配函式就是個返回void 指標型別的函式。若寫成void fun ptr unsigned int size 這時fun ptr表示一個...

c語言中的指標有什麼意義,C語言中的指標有什麼意義

寫簡單的程式的話不用指標也行了吧.比如這裡a是一個地址 編譯後 為了讀寫這個地址單元裡的東西,可以用p,也可以用一般變數a.對於指標的便利,我現在能想到的,可能是 函式a呼叫函式b時,把一個記憶體塊的地址傳遞過去,這樣可以避免按值傳遞時開闢一個棧空間並逐一拷貝記憶體塊裡的值的開銷 c 裡的拷貝建構函...