野指針可能會造成記憶體洩漏,記憶體洩漏不一定就是野指針造成的(注,野指針不是一定會造成記憶體洩漏,如果它随機指向的是一個變量位址,則就不會造成記憶體洩漏了)
記憶體洩漏:
- 定義:程式中已動态配置設定的堆記憶體由于某種原因,程式未釋放或無法釋放,造成系統記憶體的浪費,導緻程式運作速度減慢甚至系統崩潰等嚴重後果
- 造成記憶體洩漏的原因有兩點:對象沒有被釋放、循環引用
野指針:
- 定義:如果記憶體已經釋放,而指針還在引用原始記憶體,這樣的指針就稱為野指針,也稱作迷途指針。野指針不是nil指針,是指向”垃圾”記憶體(不可用記憶體)的指針
- 野指針産生原因:
-
指針變量未初始化
任何指針變量剛被建立時不會自動成為NULL指針,它的預設值是随機的。是以指針變量在建立的同時應當被初始化,要麼将指針置為NULL,要麼讓它指向合法的記憶體
-
指針釋放後未置空
指針在free或delete後未指派NULL,此時指針指向的就是“垃圾”記憶體
-
指針操作超越變量作用域
不要傳回指向棧記憶體的指針或引用,因為棧記憶體 在函數結束時會被釋放