[問題] 關於access violation

看板C_and_CPP (C/C++)作者 (☆㊣↖煞氣ㄟ阿喂↘ξ★)時間16年前 (2010/01/31 20:19), 編輯推噓3(308)
留言11則, 5人參與, 最新討論串2/2 (看更多)
遇到的問題: (題意請描述清楚) 我的開發平台為 VS 2008 我在執行程式時,會大量運用到記憶體,且執行大迴圈為10^8次,內含小迴圈暫且不提。 有用動態記憶體配置,建立 List跟宣告 物件array。程式碼敘述如下: int main(){ //// Statements //// Node* ptr = new Node[N]; Scheduler God; //// Creat list //// LIST* list = creatLIST(cmpTime); God.execute(ptr, list); // 這行function 就是跑10^8次迴圈的 func // ....... destoryList(list); // 釋放 list 的 memory // delete [] ptr; // 釋放 ptr 的memory // return 0; } 我的問題是如果程式只要執行一次,那沒問題。但是我想要將 execute(ptr, list) 這個 member function 執行多次,再取平均以求得較準確結果,程式修改一下: ..... //// 比方說 跑10次 //// for( int i =0; i<10; i++){ //// Statements //// Node* ptr = new Node[N]; Scheduler God; //// Creat list //// LIST* list = creatLIST(cmpTime); God.execute(ptr, list); // 這行function 就是跑10^8次迴圈的 func // ....... destoryList(list); // 釋放 list 的 memory // delete [] ptr; // 釋放 ptr 的memory // } .... 我記憶體還是有借有還,但是執行一次過後正確,隨即出現access violation, 然後程式掛掉.... 不知道是什麼原因, 我在猜測是不是因為 Scheduler 這個class定義出來的 God 是上一輪迴圈的, 然後在下一輪迴圈 Scheduler 這個class沒有被 destruct掉,就又再定義一次God 所以導致access violation, 錯誤訊息顯示:Unhandled exception at 0x6bd912b4 (msvcr90d.dll) in test.exe: 0xC0000005: Access violation reading location 0x0000001c. 不曉得是不是這樣,希望各位指點一下, 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.144.18 ※ 編輯: kkroy 來自: 140.113.144.18 (01/31 20:38)

01/31 20:39, , 1F
試過了...把God改成 Scheduler* God = new Scheduler
01/31 20:39, 1F

01/31 20:39, , 2F
最後在 delete God,一樣不行....
01/31 20:39, 2F

01/31 20:40, , 3F
看來我的猜想好像不太對....
01/31 20:40, 3F
※ 編輯: kkroy 來自: 140.113.144.18 (01/31 20:40)

01/31 21:15, , 4F
God.execute(ptr, list); 這行mark掉還會嗎?
01/31 21:15, 4F

01/31 23:03, , 5F
new不一定會成功喔..
01/31 23:03, 5F

01/31 23:06, , 6F
不然也有可能是heap corruption
01/31 23:06, 6F

01/31 23:07, , 7F
看死在哪一行吧@@
01/31 23:07, 7F

01/31 23:53, , 8F
直接用 debugger 去 trace 看是哪行 access violation
01/31 23:53, 8F

01/31 23:53, , 9F
不是比較快?@@
01/31 23:53, 9F

02/01 00:24, , 10F
可能可以想想你是不是有什麼地方 delete兩次以上?
02/01 00:24, 10F

02/01 00:29, , 11F
可能你沒寫copy ctor 和operator = 導致delete兩次吧?
02/01 00:29, 11F
文章代碼(AID): #1BPNL9wc (C_and_CPP)
文章代碼(AID): #1BPNL9wc (C_and_CPP)