天天看點

野指針和記憶體洩漏

 野指針可能會造成記憶體洩漏,記憶體洩漏不一定就是野指針造成的(注,野指針不是一定會造成記憶體洩漏,如果它随機指向的是一個變量位址,則就不會造成記憶體洩漏了)

記憶體洩漏:

  • 定義:程式中已動态配置設定的堆記憶體由于某種原因,程式未釋放或無法釋放,造成系統記憶體的浪費,導緻程式運作速度減慢甚至系統崩潰等嚴重後果
  • 造成記憶體洩漏的原因有兩點:對象沒有被釋放、循環引用

野指針:

  • 定義:如果記憶體已經釋放,而指針還在引用原始記憶體,這樣的指針就稱為野指針,也稱作迷途指針。野指針不是nil指針,是指向”垃圾”記憶體(不可用記憶體)的指針
  • 野指針産生原因:
  1. 指針變量未初始化

    任何指針變量剛被建立時不會自動成為NULL指針,它的預設值是随機的。是以指針變量在建立的同時應當被初始化,要麼将指針置為NULL,要麼讓它指向合法的記憶體

  2. 指針釋放後未置空

    指針在free或delete後未指派NULL,此時指針指向的就是“垃圾”記憶體

  3. 指針操作超越變量作用域

    不要傳回指向棧記憶體的指針或引用,因為棧記憶體 在函數結束時會被釋放

繼續閱讀