面試題 野指標的成因,危害以及避免方法?

2022-08-30 17:00:13 字數 936 閱讀 1803

概念:野指標指向了一塊隨機記憶體空間,不受程式控制。如指標指向已經被刪除的物件或者指向一塊沒有訪問許可權的記憶體空間,之後如果對其再解引用的話,就會出現問題。

野指標產生的原因:

1、指標定義時未被初始化:指標在被定義的時候,如果程式不對其進行初始化的話,它會指向隨機區域,因為任何指標變數(除了static修飾的指標變數)在被定義的時候是不會被置空的,它的預設值是隨機的。

2、指標被釋放時沒有被置空:我們在用malloc開闢記憶體空間時,要檢查返回值是否為空,如果為空,則開闢失敗;如果不為空,則指標指向的是開闢的記憶體空間的首位址。指標指向的記憶體空間在用free()或者delete(注意delete只是乙個操作符,而free()是乙個函式)釋放後,如果程式設計師沒有對其置空或者其他的賦值操作,就會使其成為乙個野指標。

3、指標操作超越變數作用域:不要返回指向棧記憶體的指標或引用,因為棧內存在函式結束的時候會被釋放,示例**自高質量c++):

class a 

}; class b

void test1()

};

函式 test1 在執行語句 p->func()時,p 的值還是 a 的位址,物件 a 的內容已經被清除,所以 p 就成了「野指標」 。

野指標的危害:

野指標的問題在於,指標指向的記憶體已經無效了,而指標沒有被置空,解引用乙個非空的無效指標是乙個未被定義的行為,也就是說不一定導致段錯誤,野指標很難定位到是**出現的問題,在**這個指標就失效了,不好查詢出錯的原因。所以除錯起來會很麻煩,有時候會需要很長的時間。

規避方法

初始化指標時將其置為null,之後再對其進行操作。

釋放指標時將其置為null,最好在編寫**時將free()函式封裝一下,在呼叫free()後就將指標置為null。

要想徹底地避免野指標,最好的辦法就是養成乙個良好的程式設計習慣。

怎麼避免野指標 面試題)

野指標產生的原因 系統隨機分配一塊記憶體。野指標造成的錯誤 記憶體洩露,但是不一定每次都會產生段錯誤 因為偶爾一次隨機分配的記憶體是已經申請過的 如何避免野指標 1.當乙個指標沒有指向的時候,要給這個指標賦空。int p null 2.當要給乙個指標指向的空間賦值時,要檢查這個指標是否是否分配空間。...

什麼是野指標?野指標的危害?如何避免野指標?

什麼是野指標?野指標是指隨機指向一塊記憶體的指標 野指標的危害?如何避免野指標?我們要在以後養成良好的編碼習慣 1.將沒有指向的指標初始化指向null 指向null的指標不能對他的指向進行修改 2.當想給乙個指標指向的空間賦值時,一定要給這個指標分配空間 malloc 3.當空間分配完後,要檢查這個...

面試題 空指標異常的原因

1 nullpointerexception由runtimeexception派生出來,是乙個執行級別的異常。意思是說可能會在執行的時候才會被丟擲,而且需要看這樣的執行級別異常是否會導致你的業務邏輯中斷。2 空指標異常發生在物件為空,但是引用這個物件的方法。例如 string s null 物件s為...