關於delete一些注意點:
在delete之後,最好要重設指標的值,舉例
delete p;
執行之後 p變成了沒有定義,在很多機器上,儘管p沒有意義,但是仍然存放它之前所指向物件的位址,然後p所指向的記憶體已經被釋放,因為p不在有效。
刪除指標之後,該指標變成懸垂指標,懸垂指標指向曾經存放的記憶體,但是該物件已經被刪除,懸垂指標往往會導致程式出一些難以察覺的錯誤。
所以指標一旦被刪除一定要將其置為0。
動態記憶體的管理容易出錯點:
1、刪除指向動態記憶體的指標失敗,因而無法將該塊記憶體還給自由儲存區,刪除動態記憶體失敗稱為:「記憶體洩露」。記憶體洩露很難發現,一般要等應用程式執行一段時間後,耗盡記憶體,才會顯露出來,所以在執行delete的操作的時候判斷其之是否刪除成功。
2、讀寫已刪除的物件,如果刪除指標所指向的物件之後,將指標置為0值,則比較容易檢測出此錯誤。
3、對同乙個記憶體空間使用兩次delete表示式,當兩個指標指向同乙個動態建立的物件,刪除時就會發生錯誤,如果在其中的乙個指標上做delete運算,將該物件的記憶體空間返還給自由儲存區,然後接著delete第二個指標,此刻則自由儲存區可能會被破壞。
C Primer讀書筆記整理(二)
8.陣列 標準庫begin和end函式可作用於陣列,分別用於獲取指向陣列首元素和尾元素下一位置的指標。例如 int ia int beg begin ia beg指向陣列首元素 int e end ia e指向陣列尾元素下一位置 begin和end函式定義在標頭檔案iterator中。另外 可以使用...
C primer 讀書筆記
第2 章 變數和基本型別 1 變數直接初始化和變數 複製初始化 int ival 1024 direct initialization int ival 1024 copy initialization 初始化不是賦值 2 內建型別復 制初始化和直接初始化幾乎沒有區別 但 對類型別物件來 說,有些初...
C Primer讀書筆記
前些日子開始看 c primer 順便做一些筆記,既有書上的,也有自己理解的。因為剛學c 不久,筆下難免有謬誤之處,行文更是凌亂 所幸不是用來顯配的東西,發在linuxsir只是為了方便自己閱讀記憶,以防只顧上網忘了正事。書看了不到一半,所以大約才寫了一半,慢慢補充。const要注意的問題 1 下面...