Re: [問題] 使用new的記憶體釋放問題

看板C_and_CPP (C/C++)作者 (羊咩)時間16年前 (2009/07/27 23:25), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
謝謝各位版的提供的資訊 我今天試了一下 照下面的function來new (用while讓它多跑幾次) 再用top來看記憶體 在linux下執行 結果是 程式在run時記憶體是會一直被吃掉的 不過在程式結束後記憶體會被釋放回來 雖然程式結束之後記憶體會被釋放 (不過 C 的malloc似乎就不會因為程式結束釋放?) 但顯然像版友說的一樣 要養成寫delete的好習慣才好 :) 才不會程式長期run下來當掉 題外話 剛開始會產生這個疑問是因為在看到一段code: --------------------------------------------- QTableWidget *tableWidget = new QTableWidget; tableWidget->setItem(0, 0, new QTableWidgetItem("January")); tableWidget->setItem(1, 0, new QTableWidgetItem("February")); tableWidget->setItem(2, 0, new QTableWidgetItem("March")); --------------------------------------------- 這是QT的程式 看到時想說像他這樣直接new起來丟進function裡 到時找不到point都不知道怎麼delete 才想說是不是其實不用加delete也可以 不過後來我有去找了一下QT底層的sourcecode 發現QTableWidget 在解構子時有去做delete的動作 所以...就真相大白啦! 謝謝大家囉! :) ※ 引述《ii237 (羊咩)》之銘言: : 各位版友好 : 我想請問一下有關new 和 delete的問題 : 例如下面function : void function_1 (){ : int *tmp = new int; : } : 請問此function_1被呼叫執行後,使用new做出來的記憶體空間是否會被自動release掉? : 我原本是認為,因為*tmp是function級的變數,因此function_1結束後*tmp這個用來存放 : 指標的空間會被release掉,因此它所指向的記憶體空間(new出來的記憶體)也會被放掉. : 但後來想想好像不太對,因為C++也不像JAVA一樣有自動清除記憶體的功能. : 我是想問說,在使用new時,若沒有配會delete,new出來的空間有可能由系統release掉嗎? : 像是程式結束之類的.或是其實程式結束後記憶體依然沒有釋放? : 但是因為我試過多次跑程式,再去看記憶體使用量,似乎也沒有增加的跡像. : 題外話 : 會這麼問其實是因為,看了很多使用new的程式,似乎都沒有特別去做delete : 不知道這是因為寫程式的人沒有做到正確記憶體釋放..或是這是可以接受的用法 : 請各位版友不吝指教,謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.46.195.20
文章代碼(AID): #1ARSRKuO (C_and_CPP)
文章代碼(AID): #1ARSRKuO (C_and_CPP)