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

動態產生Form的錯誤訊息...

尚未結案
look4help
一般會員


發表:9
回覆:8
積分:3
註冊:2005-07-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-14 01:43:30 IP:218.164.xxx.xxx 未訂閱
請教一下。 我想在一個公用程式檔(就是沒有Form畫面)中寫一個可以動態Create From的函式: 結果我在測試的時候,有時候會出現錯誤訊息。我查不出問題再哪哩,請各位幫我看一下可能的原因好麼?謝謝。    公用程式檔uTility.cpp檔中,有動態產生Form函式如下:  
extern void DynamicCallForm(char FormTag);
extern void DynamicCallForm(char FormTag)
{
  if (parameter.DynamicFormParent->ControlCount>0)
   {
    delete parameter.DynamicFormParent->Controls[0];
   }     TForm* myFormclass ;     switch (FormTag)
   {
    case '1' :
             myFormclass = new TfCreateORLoad(xxx);   
             break;
    case '2' :
             myFormclass = new TfOpenVirtualTreeExplor(xxx);
             break;
   }
 myFormclass->Hide();
 myFormclass->BorderStyle = bsNone;
 myFormclass->Parent = parameter.DynamicFormParent;
 myFormclass->Align = alClient;
 myFormclass->Show();    }     
我的架構是這樣: 1.程式主Form上宣告一個全域變數,Struct型態(藍色部分文字)。
  struct Parameters
  {
    TPanel* DynamicFormParent;---->於fBakform的FormCreate事件時給值=Panel1
    TComponent* CreateOwner; ---->於fBakform的FormCreate事件時給值=this
    bool isCreateNew;
  };
 Parameters parameter;
 
2.主Form上一個按鈕按下後,會開啟fBakform。 3.TfCreateORLoad / TfOpenVirtualTreeExplor分別為另外兩個Form。fBakform放一個按鈕。 Button1呼叫DynamicCallForm('1')。在Button1事件時,fBakform本身不會被關掉。只是負責產生一 個TfCreateORLoad類別的Form。 4.在TfCreateORLoad上放另一個按鈕Button2。呼叫DynamicCallForm('2')。執行此函式後,程式必須 要把fCreateORLoad自己先移除掉,然後產生一個TfOpenVirtualTreeExplor類別的Form。 因為我想將每次Create的From放在這個fBakform的Panel上,所以上面DynamicCallForm函式中, 紅色文字的部份,我不清楚該放什麼。我之前放過parameter.DynamicFormParent,也試過放 parameter.CreateOwner。編譯都會成功。但是執行測試時,前一兩次輪流Click這兩個按鈕。可能沒問題,可是不久之後就會出現AccessViolation或Abstract Error. 不知道原因到底出在哪裡?請教高手指點一下,謝謝。 發表人 - look4help 於 2005/09/14 01:44:52
mier_tt
一般會員


發表:18
回覆:43
積分:12
註冊:2004-12-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-14 10:54:14 IP:219.128.xxx.xxx 未訂閱
您好,出現AccessViolation的Error,問題可能出在這邊: myFormclass = new TfCreateORLoad(xxx); break; myFormclass = new TfOpenVirtualTreeExplor(xxx); break; 你有New, 卻沒有Delete掉,造成了記憶体的洩漏。
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-15 14:06:13 IP:203.70.xxx.xxx 未訂閱
look4help您好 建議您開codeguard看看,記憶體存取違規他應該抓得出來, 並會指出是哪一行出問題... 或者是放上完整程式碼,讓大家幫您看看... 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
系統時間:2024-04-28 12:54:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!