看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) 我的開發平台為 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)
kkroy:試過了...把God改成 Scheduler* God = new Scheduler 01/31 20:39
kkroy:最後在 delete God,一樣不行.... 01/31 20:39
kkroy:看來我的猜想好像不太對.... 01/31 20:40
※ 編輯: kkroy 來自: 140.113.144.18 (01/31 20:40)
jaw109:God.execute(ptr, list); 這行mark掉還會嗎? 01/31 21:15
holyspectral:new不一定會成功喔.. 01/31 23:03
holyspectral:不然也有可能是heap corruption 01/31 23:06
holyspectral:看死在哪一行吧@@ 01/31 23:07
saxontai:直接用 debugger 去 trace 看是哪行 access violation 01/31 23:53
saxontai:不是比較快?@@ 01/31 23:53
QQ29:可能可以想想你是不是有什麼地方 delete兩次以上? 02/01 00:24
QQ29:可能你沒寫copy ctor 和operator = 導致delete兩次吧? 02/01 00:29