程式關閉錯誤 |
答題得分者是:RaynorPao
|
palw
初階會員 發表:45 回覆:89 積分:26 註冊:2003-02-24 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 我寫了一個程式,但有時候關閉時會出現錯誤訊息,程式關閉後 會先出現: 應用程式錯誤 應用程式發生例外不明軟體例外錯誤(0x0eedade)於位置0x77e6f142 出現兩次之後,還會出現: Abnormal program termination 請問一下,為什麼會造成這樣的情況呢?或者有什麼可能會造成這樣的情況呢? 懇請指教。謝謝!palw 你好: 這種情況~~通常都是自己的指標(記憶體管理)沒有處理好才會造成的< > 建議你先檢查自己的程式碼流程中的先後順序,或者把你的程式碼貼上來< > -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
palw
初階會員 發表:45 回覆:89 積分:26 註冊:2003-02-24 發送簡訊給我 |
引言:引言: 我寫了一個程式,但有時候關閉時會出現錯誤訊息,程式關閉後 會先出現: 應用程式錯誤 應用程式發生例外不明軟體例外錯誤(0x0eedade)於位置0x77e6f142 出現兩次之後,還會出現: Abnormal program termination 請問一下,為什麼會造成這樣的情況呢?或者有什麼可能會造成這樣的情況呢? 懇請指教。謝謝!palw 你好: 這種情況~~通常都是自己的指標(記憶體管理)沒有處理好才會造成的< > 建議你先檢查自己的程式碼流程中的先後順序,或者把你的程式碼貼上來< > -- Enjoy Researching & Developing -- 版主,你好: 也就是說記憶體沒有釋放掉嗎?因為程式太長了,有十幾個FORM,不過大部分都是動態產生的FORM,不知道是不是跟此有關係,在程式中,我也使用了很多的MEMO。MEMO也要釋放記憶體嗎?如果要釋放記憶體,要怎麼做呢?把變數清空就好了嗎? |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 版主,你好: 也就是說記憶體沒有釋放掉嗎?因為程式太長了,有十幾個FORM,不過大部分都是動態產生的FORM,不知道是不是跟此有關係,在程式中,我也使用了很多的MEMO。MEMO也要釋放記憶體嗎?如果要釋放記憶體,要怎麼做呢?把變數清空就好了嗎? palw 你好: (1)基本上在 design time 就拉到 form 上的元件,是不需要自己再做釋放的動 作的 (2)如果你的程式碼很多的話,建議你可以利用 bcb 的 debug 功能,把中斷點 設在接近程式結束的地方,先把發生問題的那一行找到最重要 (3)另外~~這裡也有一個 debug 工具可以用(參考看看) > --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
palw
初階會員 發表:45 回覆:89 積分:26 註冊:2003-02-24 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
palw
初階會員 發表:45 回覆:89 積分:26 註冊:2003-02-24 發送簡訊給我 |
版主你好: 試過了方法,Debug抓到了一些資料,但我看不太懂,方便說明一下嗎?或者這些是錯誤的訊息嗎? 00000000 0.00000000 [1448]
00000001 0.00000000 [1448] Printing page:
00000002 0.00781803 [1448] 1
00000003 0.22252130 [1448]
00000004 0.22252130 [1448] Printing page:
00000005 0.22502664 [1448] 2
00000006 0.51094790 [1448]
00000007 0.51094790 [1448] Printing page:
00000008 0.53587677 [1448] 3
00000009 0.96507489 [1448]
00000010 0.96507489 [1448] Printing page:
00000011 0.98556716 [1448] 4
00000012 1.39500579 [1448]
00000013 1.39500579 [1448] Printing page:
00000014 1.39530834 [1448] 5
00000015 2.61995952 [1448]
00000016 2.61995952 [1448] Printing page:
00000017 2.62029364 [1448] 6
00000018 2.65072879 [1448]
00000019 2.65072879 [1448] Printing page:
00000020 2.65104643 [1448] 7
00000021 2.83009321 [1448]
00000022 2.83009321 [1448] Printing page:
00000023 2.83047063 [1448] 8
00000024 3.03105367 [1448]
00000025 3.03105367 [1448] Printing page:
00000026 3.03138555 [1448] 9
00000027 3.38860414 [1448]
00000028 3.38860414 [1448] Printing page:
00000029 3.38893547 [1448] 10
00000030 3.51732860 [1448]
00000031 3.51732860 [1448] Printing page:
00000032 3.51764791 [1448] 11
00000033 3.69157868 [1448]
00000034 3.69157868 [1448] Printing page:
00000035 3.69190414 [1448] 12
00000036 3.88616710 [1448]
00000037 3.88616710 [1448] Printing page:
00000038 3.88650233 [1448] 13
|
tender
初階會員 發表:23 回覆:90 積分:37 註冊:2002-09-26 發送簡訊給我 |
請問你有在Form裡開執行緒嗎!!
若有的話,那應該就是他了!!
若宣告一個 TThread *xxx
又一直 new 同一個 xxx
例如
for (int k=0;k<10;k )
xxx = new xyzThread(false) 在一個就的執行緒為完成前且未紀錄該執行緒的之指標
再關掉AP時會爆炸,因為雖然Builder的compiler會自行紀錄
但它會錯亂到底 xxx 是指哪一個未關閉的執行緒要被關掉呢
然後就 Bomb 才疏學淺小朋友的淺見 ^_^
(Ps. 若我的觀念錯了請 OB 指導喔 )
|
palw
初階會員 發表:45 回覆:89 積分:26 註冊:2003-02-24 發送簡訊給我 |
|
palw
初階會員 發表:45 回覆:89 積分:26 註冊:2003-02-24 發送簡訊給我 |
|
tender
初階會員 發表:23 回覆:90 積分:37 註冊:2002-09-26 發送簡訊給我 |
有一個可能性,就是在你關閉AP時你所開的主執行緒(就是AP本身的程序),已經將
你的資源釋放了,但是你開的執行緒未關閉且引用到以釋放的資源.
如: 主程序:
xxx = new char[10];// xxx is an public var.
delete xxx; // 以關閉 你所開的執行緒:
主程序->xxx = "1234";//未關閉就會出現錯誤 =========================
或者是你有用TList 或 TListView 嗎?
使用list 裡沒有資料的 Index 也有可能喔!!
如 list 的 items 只有2個
那 list->Items->Item[2].. //就會出現類似那個位址的錯誤 ^_^
|
palw
初階會員 發表:45 回覆:89 積分:26 註冊:2003-02-24 發送簡訊給我 |
謝謝tender,但我目前的情況是這樣....
當表單建立的時候 ,我就建立一個Thread,當NMPOP3->Connected == true的時候,我就啟動Thread,收完了信NMPOP3->Disconnect,我就將Thread暫停,再連線至另一個HOST收信的時候,再啟動。。。,表單關閉的時候,我就Close Thread ... 之前的作法是,每次Connect的時候,就建立Thread,當Discooect的時候就停止那個Thread,於是這樣會有之前我所提到的問題,就是關閉的時候會有Error產生,可是在執行過程都會很順利。 但我目前的方法,讓我的程式在執行中變的很不穩定,很容易沒有回應。 請問一下,為什麼中斷再啟動就怪怪的呢?難道應該直接停止再建立新的Thread嗎?可是這樣關閉時會有錯誤的問題產生,請大家幫幫忙。。謝謝。
|
tender
初階會員 發表:23 回覆:90 積分:37 註冊:2002-09-26 發送簡訊給我 |
|
palw
初階會員 發表:45 回覆:89 積分:26 註冊:2003-02-24 發送簡訊給我 |
|
palw
初階會員 發表:45 回覆:89 積分:26 註冊:2003-02-24 發送簡訊給我 |
//按下Receive Mail的命令鈕的時候
void __fastcall TForm1::cmdreceiveClick(TObject *Sender)
{
Form1->Re_Status = "Receive All";
MailThread->Resume();
} // MailThread的Form
void __fastcall TMailThread::Execute()
{
//---- Place thread code here ----
//====宣告變數=======
setup_ini a;
D1 b;
c_file c;
D2 d;
Receive_Mail = new TStringList();
Receive_Mail->LoadFromFile("Mail_Save.txt");
//=================== /*-----------------初始化------------------
cancel_flag-->使用者是否按下Stop鍵來停止收信
Dir2-->目前位置為MyMails/Setup下
same_key --->是否此封信已接收過
Memo7-->紀錄Mail的索引
*/
Form1->cancel_flag=false;
a.same_key = false;
SetCurrentDir( Form1->Dir2 );
//----------------------------------------- //===============判斷目前有幾個Host要收===================================
//宣告變數 //預設值 a.TotalLines = 0;
c.File_Name = Form1->Dir2 + "\\Setup.ini";
a.A = new TFileStream(c.File_Name,fmOpenRead);
a.FileSize = a.A->Size;
a.codebuffer = new char[a.FileSize];
a.A->Read(a.codebuffer,a.FileSize); for(a.CodeIndex=0;a.CodeIndex
|
tender
初階會員 發表:23 回覆:90 積分:37 註冊:2002-09-26 發送簡訊給我 |
|
palw
初階會員 發表:45 回覆:89 積分:26 註冊:2003-02-24 發送簡訊給我 |
|
palw
初階會員 發表:45 回覆:89 積分:26 註冊:2003-02-24 發送簡訊給我 |
|
palw
初階會員 發表:45 回覆:89 積分:26 註冊:2003-02-24 發送簡訊給我 |
引言: 目前我又將程式改回在Host連線時,建立Thread,而Disconnect時,刪除Thread... 可是我要如何避免成適當掉的時候,沒有刪除Thread呢?我可以判斷Thread是否有被刪除嗎?有相對的屬性嗎?我之前有試過,但沒有發現,希望大家幫幫忙.謝謝!! >>< face="Verdana, Arial, Helvetica"> 現在我找到一個方法,就是將FreeOnTerminate設為true,請問.如果Thread執行的時候,突然當掉,那Thread會自動Terminate嗎?? |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 現在我找到一個方法,就是將FreeOnTerminate設為true,請問.如果Thread執行的時候,突然當掉,那Thread會自動Terminate嗎?? >>< face="Verdana, Arial, Helvetica"> palw 你好: 理論上來說,thread 的生命週期是跟著 create 它的 process 當 process 被 terminate 的時候,thread 也會跟著被 terminate --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
palw
初階會員 發表:45 回覆:89 積分:26 註冊:2003-02-24 發送簡訊給我 |
引言:引言: 現在我找到一個方法,就是將FreeOnTerminate設為true,請問.如果Thread執行的時候,突然當掉,那Thread會自動Terminate嗎?? >>< face="Verdana, Arial, Helvetica"> palw 你好: 理論上來說,thread 的生命週期是跟著 create 它的 process 當 process 被 terminate 的時候,thread 也會跟著被 terminate -- >>< face="Verdana, Arial, Helvetica"> 版主你好: 那表示我關閉此程式,也就等於將process terminate摟? |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 那表示我關閉此程式,也就等於將process terminate摟? >>< face="Verdana, Arial, Helvetica">palw 你好: (1)是的 (2)如果你的作業系統是 Windows NT/2000/XP 可以利用工作管理員來驗證 (3)打開工作管理員,點選「處理程序」TAB,然後點選「檢視/選擇欄位」確認 「執行緒計數」這個選項已經打勾,按「確定」,然後執行你的程式(exe) 觀察你的程式的 process 及 thread,直至程式關閉為止-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |