Free動態 Form後,還能訪問其中var??? |
尚未結案
|
kissdelphi
一般會員 發表:7 回覆:9 積分:3 註冊:2003-01-09 發送簡訊給我 |
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 發送簡訊給我 |
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;混心雜欲 棄修身~唉
------
唉~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |