內存泄露的解決辦法
什麼是內存泄漏(memory leak)?
指由於疏忽或錯誤造成程序未能釋放已經不再使用的內存的情況。內存泄漏並非指內存在物理上的消失,而是應用程序分配某段內存後,由於設計錯誤,失去了對該段內存的控制,因而造成了內存的浪費。
操作方法
(01)case 成對使用case 2.正確的清理嵌套的對象指針。解決辦法:a、在外部函數分配的堆內存,不要在調用函數裏面釋放,而應該在外部函數釋放。b、儘量在構造函數中分配內存。c、在基類/繼承類中分管各自的內存。
(02)case 3 釋放對象數組時,要使用delete []a、對單個對象、基本類型的變量,用delete;b、對基本類型數組,採用delete,delete[]均可;c、對自訂的對象的所組成的對象數組,一定要採用delete [].
(03)case 4 指向對象的指針構成的數組,必須用戶自己調用delete。for example:Point **pPtrAry = new Point*[10]; // 循環爲每個指針分配一個Point對象; int i = 0; for (; i < 10; ++i) { pPtrAry[i] = new Point(i, i, "Green"); }// 下面語句並沒有釋放10個Point對象,釋放的只是他們的指針所組成的數組 // 佔用的10*sizeof(Point*) 空間,造成了內存泄露 // (180 = 10*sizeof(Point) + 10* 6; (6= sizeof("Green")))// delete []pPtrAry;// 正確的方法: for (i = 0; i < 10; ++i) { delete pPtrAry[i]; } delete []pPtrAry; // 或者delete pPtrAry;
(04)case 5 對於有指針對象的類,必須有顯示的拷貝構造函數。
(05)case 6 必要的重載賦值運算符。
(06)case 7 基類的析構函數定義爲虛函數。
(07)這裏主要存在基類指針指向派生類的情況。如果析構函數定義爲虛函數,則釋放基類指針時,如果該指針指向一個派生類,則會先調用派生類的析構函數,再調用基類的析構函數(不管是不是虛函數,派生類的對象析構的時候,都會先調用派生類的析構函數,再調用基類的析構函數)。
(08)最後以下是怎樣避免內存泄露:良好的編碼習慣,儘量在涉及內存的程序段,檢測出內存泄露。當程式穩定之後,在來檢測內存泄露時,無疑增加了排除的困難和複雜度。使用了內存分配的函數,要記得要使用其想用的函數釋放掉,一旦使用完畢。
-
老司機帶你飛不用怎麼找百度雲資源分享你懂
我們有一些資源平時是儲存在百度雲裏面的,要想分享給身邊的朋友怎麼操作呢,下面就給大家介紹一下如何分享百度雲資源。操作方法(01)開啟瀏覽器,然後在搜尋欄裏面輸入【百度網盤】,然後點擊百度網盤的官方網站。(02)開啟百度網盤的登入介面後,透過掃一掃登入。就是開啟手...
-
二進制、八進制、十進制、十六進制之間的轉換
進制也就是進制位,對於接觸過電腦的人來說應該都不陌生,我們常用的進制包括:二進制、八進制、十進制與十六進制,它們之間區別在於數運算時是逢幾進一位。比如二進制是逢2進一位,十進制也就是我們常用的0-9是逢10進一位。具體的用法小編今天不着重解釋,主要針對他們之...
-
百度地圖檢視座標
操作方法(01)首先,電腦開啟搜狗瀏覽器,進入百度官網。(02)在上邊我們點擊百度地圖的按鈕。(03)進入地圖上,可以看到當前自己所在城市。(04)點擊地圖下方的“地圖開發平臺”按鈕。(05)在地圖開放平臺頁面,點擊:開發文檔——座標拾取器。(06)然後在地圖中,隨意點擊一個位置,就可以查...
-
framework3.5怎麼安裝
framework3.5是一個框架,主要功能是多語言組件的開發以及執行環境,下面說說怎麼安裝以供參考:操作方法(01)首先在瀏覽中輸入framework3.5,在網頁結果中點擊普通下載。(02)下載好之後雙擊開啟,等待軟件加載組件程序。(03)之後再選擇我已經閱讀並接受許可協議中的條款,再點擊...