作者LinRungChuan (吉他手)
看板C_and_CPP
標題Re: [問題] 沒new導致heap
時間Wed Mar 24 14:27:41 2010
我是一開始問問題的原po,我敘述一下目前我找這問題卡住的地方
主程式在這 跟一些客製化的定義都在這檔案
http://paste.plurk.com/show/213008/
主程式跟客製化函數的宣告是這檔案
http://paste.plurk.com/show/213012/
這project比較不會修改到的內部functions在這檔案
http://paste.plurk.com/show/213010/
上面那些functions的宣告在這
http://paste.plurk.com/show/213011/
我從主程式裡面的 delete sim;查(不加這行不會有堆積的問題,但會真的會
跑到記憶體不足=.=)
從~Simulation()到~Scheduler()再到~EventManager()都正常
~EventManager()裡面delete的一串物件 是new一些class繼承了class Resource
當~EventManager()每delete一個物件就會執行~Resource()
delete完最後一個RecoveryRoomLevel2_obj;後 程式會一直在~Resource()
就一直在這個解構子跑到heap的訊息出現...
在 EventManager()裡面有2個vector(ORList跟DoctorList)
放了很多new的物件進去,不知道是不是這邊寫法出問題,
不過這邊除了用vector存那些new的物件,我就不知到其他方式了
這樣問不知道會不會很亂...
感謝幫忙 m(-.-)m
※ 引述《visor (~~~~~~~~~~)》之銘言:
: 隔空抓藥一下
: 先猜 你的 class A 裡面有存在一個成員是指標變數 假設是 *ptr
: 在 class A 建構時 會去 new 一塊空間給 ptr
: 然後在 class A 的 function 裡面有做到像是下面這種動作
: class A a;
: class A b;
: b = a;
: 然後 ~A() 又去直接 delete ptr
: 才造成像這樣的錯誤
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 161.130.178.135
推 ADF:EventManager::EventManager 裡 SaveResCap = GetResCap; 錯誤 03/24 15:17
→ rephansu:錯的有點離譜, 要拷貝資料不能用"="啊 03/24 15:25
推 visor:哈 藥抓錯了 不過差一點點 XDDDD 03/24 15:45
推 VictorTom:眼力跟耐心真好....Orz 03/24 15:51
→ visor:其實看幾行就找出問題啦 03/24 15:55
→ visor:這個 aveResCap = GetResCap; 看起來像是後來加進去的 03/24 16:04
→ LinRungChuan:啊哈~感謝抓到藥了,是的那是後來加入的~:)痛哭流涕中 03/24 17:33
→ LinRungChuan:可以delete了,我好像常犯這個錯,這只copy位指是嗎 03/24 17:40
→ LinRungChuan:因為每次都得到一樣的值,計算沒錯~就都這樣錯下去 03/24 17:40
→ LinRungChuan:順便問一下這個我存在很久的疑問,要copy指標變數的值 03/24 17:43
→ LinRungChuan:給新的變數,這樣只能用for迴圈一個一個元素copy嗎 03/24 17:44
→ LinRungChuan:還是有比較有效率的方式? 03/24 17:45
→ visor:看一下 memcpy 吧 03/24 18:26
→ LinRungChuan:OKOK~了解了~感謝:) 03/24 19:03