[問題] 沒new導致heap

看板C_and_CPP作者 (吉他手)時間14年前 (2010/03/23 16:10), 編輯推噓6(6012)
留言18則, 8人參與, 最新討論串1/4 (看更多)
寫了class若有需要物件,我習慣都會用new 我一直以為用new或沒用 差別在於 配了記憶體之後 物件call method 物件->method 及 物件.method 使用上的差別而已 但我在迴圈內要new物件 兩種寫法有為何會有差別 ex. class A{ A(int,int); functionA(int); ~A(); } void main(){ int ba=1, la=2, bala=3; A *A_Obj; for(int i=0 ; i<10 ; i++) { A_Obj = new A(ba,la); A_Obj->functionA(bala); } } 以上寫法可以正常執行 但如果沒使用new, main裡面改成 void main(){ int ba=1, la=2, bala=3; for(int i=0 ; i<10 ; i++) { A A_Obj(ba,la); A_Obj.functionA(bala); } } 迴圈跑到第2圈 就會有heap 的訊息出現 我觀念可能有錯,一直以為兩種寫法都可以,想知道為何不用new的 這狀況就不能跑,執行環境是VC++2008 感謝 =======================補充 分隔線============================= 如果放delete在迴圈內 void main(){ int ba=1, la=2, bala=3; A *A_Obj; for(int i=0 ; i<10 ; i++) { A_Obj = new A(ba,la); A_Obj->functionA(bala); delete A_Obj; } } 會發生跟第2種寫法,沒有用new一樣的問題 當執行到第2圈 程式會中止 且跳出訊息視窗: Windows has triggered a breakpoint in XXX.exe. This may be due to a corruption of the heap, which indicates a bug in XXX.exe or any of the DLLs it has loaded. this may also be due to the user pressing F12 while XXX.exe has focus. ================================================================ 原本手頭有兩個projects一個是模擬project另一個是演算法project 現在要把模擬的 併到 演算法裡面 來開發另一個新的演算法 我把舊的演算法的project當主程式 當跑到for裡的建構子就是去執行模擬的那個project 兩分code 併起來 好亂>.<... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 161.130.178.135

03/23 16:12, , 1F
第一種有明顯的memory leak
03/23 16:12, 1F

03/23 16:13, , 2F
有沒有new差很多,建議你重新整理一下你的觀念
03/23 16:13, 2F

03/23 17:16, , 3F
如果放delete A_Obj在迴圈內 會跟沒有* 一樣發生heap
03/23 17:16, 3F

03/23 17:18, , 4F
有沒有new我還在google中 目前還是爬到.跟->的差別XD
03/23 17:18, 4F

03/23 17:24, , 5F
我不懂什麼叫「發生heap」,你知道heap是什麼嗎?
03/23 17:24, 5F

03/23 17:31, , 6F
發生堆積 - -a
03/23 17:31, 6F

03/23 17:52, , 7F
恩恩翻譯應該是~堆積或堆疊吧,歹勢 我沒有很正規的學
03/23 17:52, 7F

03/23 17:53, , 8F
你可以貼上完整的code, 我想heap後面八成還有字....
03/23 17:53, 8F

03/23 17:53, , 9F
C++都是上網跟翻書,但現在手邊只有一本老舊的中文
03/23 17:53, 9F
※ 編輯: LinRungChuan 來自: 161.130.178.135 (03/23 18:12)

03/23 18:32, , 10F
現在看起來是 Class A 的程式碼有問題
03/23 18:32, 10F

03/23 18:33, , 11F
同樓上; 再不然就是你合併哪裡弄壞了XD
03/23 18:33, 11F

03/23 19:04, , 12F
感謝:) 那我只好回到模擬的code找了...有沒有比較
03/23 19:04, 12F

03/23 19:05, , 13F
有效率的方式找問題出在哪段~~模擬的project是已經
03/23 19:05, 13F

03/23 19:06, , 14F
被發表的文章提供的source code一堆class跟methods
03/23 19:06, 14F

03/23 19:07, , 15F
我現在只能一段一段下斷點來找╤.╤..
03/23 19:07, 15F

03/23 19:30, , 16F
有沒有可能是使用了未分配成功或以釋放的指標?
03/23 19:30, 16F

03/23 20:59, , 17F
聽小弟一言,C++是個你「必需要很正規的學」才可以的語言
03/23 20:59, 17F

03/23 21:00, , 18F
不然比較建議你去寫 Java 或是其他 script lang
03/23 21:00, 18F
文章代碼(AID): #1Bg7TdRX (C_and_CPP)
文章代碼(AID): #1Bg7TdRX (C_and_CPP)