全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:6185
推到 Plurk!
推到 Facebook!

程式加入迴圈後出現External exception EEFFACE

答題得分者是:syntax
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-13 14:34:14 IP:140.118.xxx.xxx 訂閱
Error 1:Project DBDWSN.exe raised exception class EAcessViolation with message 'Access Violation'
Error 2:Project DBDWSN.exe raised exception class EAcessViolation with message 'Exception Object Address: 0x1F13E72'
Error 3:Project DBDWSN.exe raised exception class EAcessViolation with message 'Exception Object Address: 0x1F13F92'
Error 4:External exception EEFFACE


我的程式會出現這些問題....
FindCycle()這一段
在for i=0 ~ 120 的時候,在120的時候會有以上的問題...ps如果只跑120不會有錯
trace code發現應該是在node[i].link_pairs出現問題,因為node[i].link_pairs.size() =0 導致for(int j=0;j 但是node[i].link_pairs應該要有東西才對....

請問這是什麼原因?
我的code是用BCB2007寫的,之後有問題的時候我把改寫到BCB6,但是更慘連單獨跑一個值( Ex. i=1 )程式就會當在那不動...
問題大概出在第246行的sort(node[i].sets[count_m-1].One_Hop_Set.begin(),node[i].sets[count_m].One_Hop_Set.end());,因為跑到這一段就掛了,也沒跑到前面的for,也沒繼續往下跑....

附上我的程式,希望有人能抽空幫我看看。
我目前是打算整個重寫看看是不是哪裡寫錯了....我猜想是某個東西overflow,但是又找不到問題所在...

謝謝
附加檔案:46bffb665cf76_BD.rar
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-15 01:20:11 IP:61.64.xxx.xxx 訂閱
如果是用 link list 最好釋放物件記憶體時,也要一併清除參考,才不會發生違規的記憶體存取
例如 node[120].link_pairs 的 link_pairs 所指到的物件已被釋放,但這裡所記錄的記憶體位址,並未加以歸零
於後方使用回圈統一式的處理,就會使用此位址,而造成存取違規

建議 (一般都是說要 new 與 free 成對出現)
但使用 link list ,最好 free(
node[120].link_pairs) 與 node[120].link_pairs = NULL 也是成對出現
for .....{

if (
node[120].link_pairs != NULL) {} <---------------- 加入判斷

}

要是你有自己的記憶體管理與判斷方式,哪也行,只要記住,使用前先宣告,釋放後勿使用,釋放時一併清除參考,這大原則
「違規的記憶體存取」就不會來煩你

===================引 用 GGL 文 章===================
Error 1:Project DBDWSN.exe raised exception class EAcessViolation with message 'Access Violation'
Error 2:Project DBDWSN.exe raised exception class EAcessViolation with message 'Exception Object Address: 0x1F13E72'
Error 3:Project DBDWSN.exe raised exception class EAcessViolation with message 'Exception Object Address: 0x1F13F92'
Error 4:External exception EEFFACE


我的程式會出現這些問題....
FindCycle()這一段
在for i=0 ~ 120 的時候,在120的時候會有以上的問題...ps如果只跑120不會有錯
trace code發現應該是在node[i].link_pairs出現問題,因為node[i].link_pairs.size() =0 導致for(int j=0;j
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-17 12:24:57 IP:140.118.xxx.xxx 訂閱
謝謝....

我發生問題後查書,所以我猜測是記憶體的問題,一般書都是說new 跟 delete 成對使用...

因為還要加入一些功能在有問題的程式之前,暫時沒時間測試,想要整個重寫,好好注意記憶體的問題....

希望可以避免掉這個問題
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-20 12:18:34 IP:140.118.xxx.xxx 訂閱
我重寫後沒這個問題,也還沒用到new and delete,但是我的structure有做更動,
發現一些多餘的宣告,本來只要int,我宣告成struct,以為可以方便之後的運算,可能是這樣導致耗用記憶體吧
系統時間:2024-04-27 4:14:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!