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 因為指標變數在定義時如果未初始化,值也是隨機的。指標變數的值其實就是別的變數 指標所指向的那個變數 的位址...