空懸指針、野指針、內存泄漏、內存溢出

  在C語言中,指針的功能十分強大,這使得在C中程序員對於指針的使用要十分地謹慎。那麼首先我們對於指針的使用就是要對空懸指針(dangling pointer)和野指針進行避免。

  首先我們介紹空懸指針,空懸指針指的是一個指針,當它指向的對象已經被釋放的時候而自身卻沒有被置爲null的時候,那麼這個指針就會變成一個空懸指針。而野指針,通俗的表示就是沒有進行初始化的指針,但是因爲一個指針沒有初始化的時候會一通亂指,這個時候就類似於空懸指針了,所以有的介紹裏面將空懸指針作爲野指針的一種來進行描述。實際上我們只需要明確一點:因爲我們在動態申請內存並用指針進行指向該塊內存,在該內存被free/delete的時候僅僅是釋放了這塊申請的內存(注意一點釋放之後就是告訴系統這塊內存可以被其他地方申請到了),但是指針仍然指向這一塊內存,那麼如果我們後續使用到這個指針,但是這個指針仍然指向的是原來的內存地址,因爲在釋放之後這塊內存地址就可以被其他的地方申請到了,那麼在有的時候就會發生災難性的後果,那麼這個時候我們需要的就是無論在初始化的時候還是在最後free/delete的時候都要將指針置爲null,對於內置類型這些由編譯器進行回收內存的類型在生存期結束之後也要置爲null(因爲如果指向它的指針的生存期比該數據長的話依舊有概率出錯)。雖然說我們在初始化指針的時候也要將指針置爲null,但那是在我們聲明一個指針卻沒有爲其定義一個指向的對象的時候的做法。實際上當我們爲其指明瞭一個指向的對象的時候就不用了。

  關於指針使用的一些注意事項,這裏主要介紹一些關於內存泄漏(memory leak)和內存溢出(out of memory)的:

  舉個很簡單的例子,內存泄漏指的是程序中有申請內存的過程,但在程序結束之後,始終沒有或者無法釋放佔有的內存的則稱爲內存泄漏,單次的內存的泄漏可能用戶並不會察覺,但是累積的內存泄漏將會十分可怕,無論內存的大小,終會被耗光。也是因爲我們在寫代碼的時候內存泄漏的問題並不嚴重,因此基本上沒有表現出問題,而且現在的操作系統是不可能將全部的計算機內存都分配給IDE的,只會預先劃分一塊內存給IDE,這時候即使出現內存泄漏情況,也不會到影響整臺電腦的情況,所以一般小規模的內存泄漏也不會出現什麼大問題,但是作爲一名程序員,在語言本身不提供內存回收機制的情況下知道及時釋放和回收內存是最基本的知識,所以必須要進行內存的釋放。

  知道了內存泄漏,知道內存溢出就變得簡單了許多,內存溢出就是可用的內存均被佔用,無法申請內存的情況。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章