今天在實現平衡二叉樹的一系列操作的時候,發現了乙個以前不經常注意的地方,記錄一下;
每個程式在執行時都會占用一塊可用的記憶體空間(malloc、new),用於存放動態分配的物件,此記憶體空間稱為自由儲存區或堆。
在使用完這塊記憶體之後,就需要我們自己釋放這塊記憶體,否則程式就會存在記憶體洩漏的問題。
這裡要注意野指標、殭屍物件的概念:
野指標:指標所指向的記憶體已經被釋放掉,而指標沒有被置為null,則會變成野指標
1、free、delet 釋放僅僅是指標指向的記憶體(堆空間),讓這塊記憶體可以被系統重新分配,而不是銷毀指標物件,指標物件是個變數,存在自己的生命週期,隨程式的結束而被銷毀;
2、另外,free、delet並不會將指標物件置為null,所以在釋放空間之後,一定要手動置為null,防止後面程式以為他是合法指標,再次進行解引用操作,造成錯誤;
殭屍物件:指已經被釋放的空間物件
1、malloc像系統在堆空間申請一塊閒置的空間,作為程式需要資料的存放,此時這塊空間受保護,不會被其它程式申請
2、free告訴系統不再需要這塊空間,可以釋放掉,允許系統將它分配給其它程式使用
3、free之後,這塊空間(指標指向位址)的資料還是存在的,當分配給其它物件的時候,才會被修改;
使用野指標訪問殭屍物件:
1、free指標之後,僅僅是告訴系統**這塊空間,但是空間內的資料以及指標的值(位址)都不會發生改變;
2、因為指標的值和空間資料都還在,所以是可以通過解引用野指標來訪問殭屍物件的,但是最好不要這麼做,因為如果這塊空間被重新分配了重要資料,可能會造成嚴重的問題,free之後必須手動將指標置為null;
3、從下面可以看到,指標已經被free掉了,但是還是可以通過這個指標訪問到原來的空間,所以每次釋放指標以後,一定要置為null,這樣在解引用的時候就不會 誤操作到野指標
殭屍物件和野指標
殭屍物件 記憶體已經被 的物件。野指標 指向殭屍物件的指標,向野指標傳送訊息會導致崩潰。野指標錯誤形式在xcode中通常表現為 thread 1 exc bad access,因為你訪問了一塊已經不屬於你的記憶體。1 什麼是殭屍物件?簡而言之,就是過度釋放的物件。2 殭屍物件有什麼特點?如果乙個物件...
C C 中野指標的問題
野指標是什麼,簡單的說就是當你釋放申請的記憶體時,沒有把指標清空,指標依然存在。只不過指標指向的記憶體區不屬於他。野指標會在退出程式時銷毀 打個比方,你有乙個房子,你賣掉了,但是你依然可以用你備用的鑰匙來開啟,儘管房子不是你的 呵呵 這是很危險的。野指標如何產生?如何避免?當我們在定義乙個指標的時候...
C C 中野指標產生的問題
指標變數未初始化 任何指標變數剛被建立時不會自動成為null指標,它的預設值是隨機的,它會亂指一氣。所以,指標變數在建立的同時應當被初始化,要麼將指標設定為null,要麼讓它指向合法的記憶體。指標釋放後之後未置空 有時指標在free或delete後未賦值 null,便會使人以為是合法的。別看free...