C語言中「野指標」 「懸空指標」是什麼?

2021-10-21 21:37:50 字數 897 閱讀 3063

1、「野指標」(wild pointer)

2、「懸空指標」(dangling pointer)

「野指標」(wild pointer):是沒有被初始化過的指標,所以不確定指標具體指向。例如以下示例**:

void *p;  // 此時 p 是「野指標」
因為「野指標」可能指向任意記憶體段,因此它可能會損壞正常的資料,也有可能引發其他未知錯誤。在實際的c語言程式開發中,定義指標時,一般都要盡量避免「野指標」的出現,可通過賦初值方式解決:

void *p = null;

void *data = malloc(size);

「懸空指標」(dangling pointer):是指標最初指向的記憶體已經被釋放了的一種指標。通俗點可以理解:指標指向一塊記憶體,如果這塊記憶體稍後被作業系統**(被釋放),但是指標仍然指向這塊記憶體,那麼,此時該指標就是「懸空指標」。例如以下示例**:

void *p = malloc(size);

assert(p);

free(p);

// 現在 p 是「懸空指標」

c語言中的「懸空指標」會引發不可預知的錯誤,而且這種錯誤一旦發生,很難定位。這是因為在 free(p) 之後,p 指標仍然指向之前分配的記憶體,如果這塊記憶體暫時可以被程式訪問並且不會造成衝突,那麼之後使用 p 並不會引發錯誤。

所以在實際的c語言程式開發中,為了避免出現「懸空指標」引發不可預知的錯誤,在釋放記憶體之後,常常會將指標 p 賦值為 null:

void *p = malloc(size);

assert(p);

free(p);

// 避免「懸空指標」

p = null;

野指標 懸空指標和懸空引用

空懸指標是這樣一種指標 指標正常初始化,曾指向過乙個正常的物件,但是物件銷毀了,該指標未置空,就成了懸空指標。野指標是這樣一種指標 未初始化的指標,其指標內容為乙個垃圾數。一般我們定義乙個指標時會初始化為null或者直接指向所要指向的變數位址,但是如果我們沒有指向null或者變數位址就對指標進行使用...

野指標和懸空指標

一 野指標 產生的原因 1 指標定義時未被初始化 指標在被定義的時候,如果程式不對其進行初始化的話,它會指向隨機區域,因為任何指標變數 除了static修飾的指標變數 在被定義的時候是不會被置空的,它的預設值是隨機的。2 指標被釋放時沒有被置空 我們在用malloc開闢記憶體空間時,要檢查返回值是否...

野指標是什麼

野指標問題 神馬是野指標?來的?有什麼危害?1 野指標,就是指標指向的位置是不可知的 隨機的 不正確的 沒有明確限制的 2 野指標很可能觸發執行時段錯誤 sgmentation fault 3 因為指標變數在定義時如果未初始化,值也是隨機的。指標變數的值其實就是別的變數 指標所指向的那個變數 的位址...