線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1655
推到 Plurk!
推到 Facebook!

請問有關Array 裡的 tstringlist 的問題

尚未結案
SamSam1230
中階會員


發表:128
回覆:178
積分:65
註冊:2004-12-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-29 14:11:23 IP:218.103.xxx.xxx 未訂閱
之前問了很多有關free object 的問題 終於有一點的了解 但關於在array 裡的 tstringlist 還是有一些不清楚的地方 就是一個a : array [0..9]of tstringlist a[0] create 之後不 free 之後a[0]再 create 那第一個的 a[0] tstringlist 是不是 = 第二個 ? 如果不是, 那代表不free , 就會一直產生新的 tstringlist object? 謝謝?
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-29 15:43:52 IP:60.248.xxx.xxx 未訂閱
嗯,a[0] 的 TStringList 是第二次或說是最新一次 Create 的 所以,你沒釋放的話,理論上就是需要一直產生新的
SamSam1230
中階會員


發表:128
回覆:178
積分:65
註冊:2004-12-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-29 16:26:56 IP:218.103.xxx.xxx 未訂閱
那如果這個放在procedure 而這個procedure 一直會被呼叫 那應該可以說是會產生 memory leak , 我這樣想對嗎?
cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-30 17:20:18 IP:210.201.xxx.xxx 未訂閱
我來試看看, 這涉及到指標和物件的關連性,指標可說是物件的代理人,程式當中只跟代理人構通,就能使用物件。當代理人跟物件失去關連性之後,程式就無法跟物件構通,此時如果物件還留在記憶體,那麼,就沒有辦法把物件釋放,因為程式找不到該物件的代理人。 a[0] create 之後不 free // 物件建立 之後a[0]再 create // 此時代理人已跟別的物件簽約了,原物件已成孤兒 您呼叫了幾次 TStringList.Create,您就產生幾個 TStringList 物件。 a[0] := TStringList.Create; a[0] := TStringList.Create; // 上面建立的TStringlist 變成孤兒。
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-30 19:03:13 IP:218.17.xxx.xxx 未訂閱
引言: 之前問了很多有關free object 的問題 終於有一點的了解 但關於在array 裡的 tstringlist 還是有一些不清楚的地方 就是一個a : array [0..9]of tstringlist a[0] create 之後不 free 之後a[0]再 create 那第一個的 a[0] tstringlist 是不是 = 第二個 ? 如果不是, 那代表不free , 就會一直產生新的 tstringlist object? 謝謝?
在 Create 之前,先判断一下 a[0]里是否已经有东西了。如果有了,就不Create.
    if Assigned(TObject(a[0])) then
begin
  //已经有东西了,就算要Create也必须先把这个释放掉:
  FreeAndNill(TObject(a[0]));
end;    
SamSam1230
中階會員


發表:128
回覆:178
積分:65
註冊:2004-12-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-03 12:06:00 IP:218.103.xxx.xxx 未訂閱
謝謝pcplayer99 , cancer 大大     我會try 一下 pcplayer99 的做法    ---------------------------------- 我用的是D4 是不是沒有 freeandnil 呢? uses 已經加了 sysutils  還是沒有    那如果改成這樣應該是一樣吧 如果有錯請指出 謝謝    
 
if Assigned(a[0]) then 
begin
      a[0].Free();
end; 
發表人 - samsam1230 於 2005/05/03 12:27:24
系統時間:2024-05-17 12:20:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!