unit Unit3;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm3 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
      Type
          PLvItemInfo = ^TlvItemInfo;
          TLvItemInfo =  record
          a  :  String;
          b  :  String;
          c  :  String;
          d  :  String;
          e  :  String;
          f  :  String;
          g  :  String;
    end;
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form3: TForm3;
  finfoList : Tlist;
implementation{$R *.dfm}procedure TForm3.Button1Click(Sender: TObject);
var
  Ptr : PLvItemInfo;
  i   : integer;
begin
  finfolist := Tlist.Create;
  for I := 0 to 1000 do  begin
      New(Ptr);
      ptr^.a := '123';
      ptr^.b  := '123';
      ptr^.c := '123';
      ptr^.d := '123';
      ptr^.e :='123';
      ptr^.f  := '123';
      ptr^.g   := '123';
      finfoList.Add(Ptr);
  end;
end;procedure TForm3.Button2Click(Sender: TObject);
var
  i : integer;
  Ptr : PLvItemInfo;
begin
  for I := 0 to finfolist.count-1 do begin
    ptr := finfolist[i];
    freemem(ptr);
  end;
  finfolist.Clear;
  finfolist.Free;
end;end./////////////////////////////////////////////////////
按纽1把RECORD中的内容加到了LIST中。按纽2我想在清空LIST内容之前把RECORD指针变量的内存释放掉。可是我这样写。内存是没有被释放的。在任务管理器中查看了。点按纽2。占用内存没有变小。请高手帮帮我。。HELP

解决方案 »

  1.   

    New分配指针,释放对应着dispose
      

  2.   

      
    for I := 0 to finfolist.count-1 do begin
        ptr := finfolist[i];
        dispose(ptr);
      end;改成这样。一样没有解决问题。
      

  3.   

    New 为指针申请内存
    dispose 为指针释放内存
      

  4.   


    测试了。我在按纽2中,并没有释放掉内存啊。
    用dispose.
      

  5.   

    New:分配内存
    Dispose:释放内存
      

  6.   

    个人理解,dispose后,告诉系统这块内存可以再次被分配,并没有交还给系统
      

  7.   

    自己解决了。
    unit Unit3;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm3 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
          Type
              PLvItemInfo = ^TlvItemInfo;
              TLvItemInfo =  record
              a  :  String;
              b  :  String;
              c  :  String;
              d  :  String;
              e  :  String;
              f  :  String;
              g  :  String;
        end;
    var
        Ptr : PLvItemInfo;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form3: TForm3;
      finfoList : Tlist;
    implementation{$R *.dfm}procedure TForm3.Button1Click(Sender: TObject);
    var
      i   : integer;
    begin
      if not assigned(finfolist) then
          finfolist := Tlist.Create;
      for I := 0 to 100000 do  begin
          New(Ptr);
          ptr^.a := '123';
          ptr^.b  := '123';
          ptr^.c := '123';
          ptr^.d := '123';
          ptr^.e :='123';
          ptr^.f  := '123';
          ptr^.g   := '123';
          finfoList.Add(Ptr);  end;
    end;procedure TForm3.Button2Click(Sender: TObject);
    var
      i : integer;
    begin
      if  assigned(finfolist) then begin
          for I := 0 to finfolist.Count-1 do begin
              ptr := finfolist.Items[i];
              dispose(ptr);
          end;
          finfolist.Clear;
          finfolist := nil;
          finfolist.Free;
      end;
    end;end.