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

Free動態 Form後,還能訪問其中var???

尚未結案
kissdelphi
一般會員


發表:7
回覆:9
積分:3
註冊:2003-01-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-07 11:36:06 IP:218.4.xxx.xxx 未訂閱
From1中Create Form2,然後Free.為什麼仍能訪問Form2中的adv變數? 用FreeAndNil沒有此問題!  
procedure TForm1.Button1Click(Sender: TObject);
var
 Form2:TForm2;
 i:integer;
begin
  try
    Form2:=TForm2.Create(self);
  finally
          //FreeAndNil(Form2);
    Form2.Free;
  end;
  Edit2.Text:=IntTostr(Form2.adv);
end;
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-07 12:33:18 IP:220.135.xxx.xxx 未訂閱
FreeAndNil(Form2)除了會釋放物件記憶體(Heap)外還會把Form2 設成nil 因此!你在存取時會造成記憶體存取錯誤 Form2.Free僅僅會釋放 Form2所佔用的記憶體,但Form2變數內容還是維持原值 所謂釋放記憶體的動作只不過是在Heap中把該段記憶體標示為Free並不會實際對 該段記憶體做任和清除資料的行為, 你可以做以下測試,可以發現Form2的確被釋放 該段記憶體被Form3佔用    
procedure TForm1.Button1Click(Sender: TObject);
var
 Form2:TForm2;
 Form3:TForm;
 i:integer;
begin
  try
    Form2:=TForm2.Create(self);
    Form2.adv := 100;//設成100 供驗證
  finally
    Form2.Free;
  end;
  Form3 := TForm.Create(self);//建立一個物件看是否會佔用剛釋放的位置
  Edit2.Text:=IntTostr(Form2.adv);//如果取的值不為100表示Form2的位置被取代了
end;
混心雜欲 棄修身~唉
------
唉~
系統時間:2024-06-01 23:15:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!