看板 C_and_CPP 關於我們 聯絡資訊
寫了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
dendrobium:第一種有明顯的memory leak 03/23 16:12
littleshan:有沒有new差很多,建議你重新整理一下你的觀念 03/23 16:13
LinRungChuan:如果放delete A_Obj在迴圈內 會跟沒有* 一樣發生heap 03/23 17:16
LinRungChuan:有沒有new我還在google中 目前還是爬到.跟->的差別XD 03/23 17:18
freesamael:我不懂什麼叫「發生heap」,你知道heap是什麼嗎? 03/23 17:24
Bencrie:發生堆積 - -a 03/23 17:31
LinRungChuan:恩恩翻譯應該是~堆積或堆疊吧,歹勢 我沒有很正規的學 03/23 17:52
VictorTom:你可以貼上完整的code, 我想heap後面八成還有字.... 03/23 17:53
LinRungChuan:C++都是上網跟翻書,但現在手邊只有一本老舊的中文 03/23 17:53
※ 編輯: LinRungChuan 來自: 161.130.178.135 (03/23 18:12)
freesamael:現在看起來是 Class A 的程式碼有問題 03/23 18:32
VictorTom:同樓上; 再不然就是你合併哪裡弄壞了XD 03/23 18:33
LinRungChuan:感謝:) 那我只好回到模擬的code找了...有沒有比較 03/23 19:04
LinRungChuan:有效率的方式找問題出在哪段~~模擬的project是已經 03/23 19:05
LinRungChuan:被發表的文章提供的source code一堆class跟methods 03/23 19:06
LinRungChuan:我現在只能一段一段下斷點來找╤.╤.. 03/23 19:07
rephansu:有沒有可能是使用了未分配成功或以釋放的指標? 03/23 19:30
yoco315:聽小弟一言,C++是個你「必需要很正規的學」才可以的語言 03/23 20:59
yoco315:不然比較建議你去寫 Java 或是其他 script lang 03/23 21:00