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

TList 造成的 Memory Leak

尚未結案
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-06 18:18:48 IP:203.66.xxx.xxx 未訂閱
請教一下各位先進 :    我寫了一段 Code 如下 :
private
FList :TList;    procedure TForm1.FormCreate(Sender: TObject);
begin
  FList := TList.Create;
end;    procedure TForm1.Button1Click(Sender: TObject);
var
  i,j:integer;
  PStr : ^string;    begin
  for j:=0 to 1000 do
  begin
    FList.Clear;
    // FreeAndNil(FList);
    // FList := TList.Create;
    for i:=0 to 100 do
    begin
      New(PStr);
      PStr^ := IntToStr(i);
      FList.Add(PStr);
    end;
  end;
end;
執行後,無論是使用 Clear 或是 Free 掉再 Create 一個新的 TList,都無法讓記憶體釋放出來,造成 Memory Leak,執行越多次,吃掉越多記憶體... 最後會 Out of Memory ... 請問是否有額外釋放的動作?該如何
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-06 18:31:34 IP:211.20.xxx.xxx 未訂閱
SouthWind 你好
  由於TList.Items的指標指向的不是TObject,所以TList.Clear時並不會自動
幫忙Free,所以這部份必須自行釋放    private
FList :TList;    procedure TForm1.FormCreate(Sender: TObject);
begin
  FList := TList.Create;
end;    procedure TForm1.Button1Click(Sender: TObject);
var
  i,j,k:integer;
  PStr : ^string;    begin
  for j:=0 to 1000 do
  begin
    // 先行釋List的內容
    For i:=0 To FList.Count-1 Do Begin
      PStr := FList[k];
      PStr^ := '' ; // 這行加不加有何差別?我也沒試過
      Dispose(Pstr);
    End ;
    // 再釋放List本身
    FList.Clear;        // FreeAndNil(FList);
    // FList := TList.Create;
    for i:=0 to 100 do
    begin
      New(PStr);
      PStr^ := IntToStr(i);
      FList.Add(PStr);
    end;
  end;
end;
以上程式片段,參考看看!!
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-07 14:42:15 IP:203.66.xxx.xxx 未訂閱
引言: SouthWind 你好 由於TList.Items的指標指向的不是TObject,所以TList.Clear時並不會自動 幫忙Free,所以這部份必須自行釋放
Chance36 Sir : PStr^ := '' ; 不加好像沒有關係,自行 Dispose 掉 item 後果然就沒有問題了,我之前太笨了,以為 FreeAndNil(FList); 會把 FList 本身與其 item free 掉,經過 Chance36 Sir 提點想通了,跟 Clear 一樣,若沒有 free 掉 item , 先把自己 free 掉,一樣會造成 Memory leak.. 另外好奇問一下,有無方法類似 FreeRAM 這樣的軟體,把自己的 Process 壓榨出 Memory 空間?? 感謝您的回覆 ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ----
系統時間:2024-06-29 17:34:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!