內存泄露的解決辦法
什麼是內存泄漏(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)下圖就表...
-
怎樣製作電子版的賀卡?
在這個互聯網如此發達的時代,每逢親朋好友過生日,各種節日的到來之際,我們總想借助互聯網送去自己的祝福。往往想給親朋好友郵寄一張賀卡,然而網絡搜索到的賀卡有時不盡人意,或沒有創意,或沒法表達自己的感情。那麼,為什麼不嘗試親手製作一張賀卡呢?步驟/方法(01)設置賀...
-
如何將圖片轉換成word文字
在工作生活中,我們經常為圖片文字識別的問題而煩惱,要知道圖片中的文字是不可編輯的,我們如果想將圖片中的文字提取出來,就只能使用識別工具對圖片進行識別,將其轉換成Word文字。可是,我們要選擇哪一款識別工具呢?大家如何將圖片轉換成Word文字呢?下面我們就一起來看看...
-
win10任務計劃在哪裏 如何打開計劃任務程序
在使用Windows10的過程中,有時候我們需要禁用任務計劃程序裏的某個計劃,這時就需要打開任務計劃程序,那麼我們怎麼樣打開計劃任務程序呢?下面就與大家分享兩個方法吧。方法/步驟1(01)在Windows10系統桌面,依次點擊“開始/Windows系統/控制面板”菜單項。(02)在打開的Win...