procedure TForm1.Button1Click(Sender: TObject);
var
        MyObj : TMyObj;
        i : integer;
        aList:TList;
begin
                aList:=TList.Create;
                for i := 0 to 100000 do
                begin
                        MyObj := TMyObj.Create() ;
                        MyObj.Foo;
                        aList.Add(myobj);                end;
                for i :=0 downto  100000 do
                begin
                        TMyObj(aList.Items[i]).free;  //这样释放不了
                        dispose(aList.Items[i]);    //这样也释放不了
                         
                end;
                aList.free;
end;TMyObj 是我自己定义的类

解决方案 »

  1.   

    for i:=10000-1 downto 0 do
    begin
      FreeAndNil(TMyObj(aList.Items[i]));
      aList.delete(i);
    end;
    FreeAndNil(aList);
      

  2.   

    for i:=10000 downto 0 do
    begin
      FreeAndNil(TMyObj(aList.Items[i]));
      aList.delete(i);
    end;
    FreeAndNil(aList);
      

  3.   

    FreeAndNil(TMyObj(aList.Items[i]));  好象不行,调试都不能通过
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      FOffLine: TRetailOffline;
      AList: TList;
      I: Integer;
    begin
      AList := TList.Create;
      try
        for I := 0 to 1000 do
        begin
          FOffLine := TRetailOffline.Create(nil, '',False);
          AList.Add(FOffLine);
        end;
        for I:= 1000 downto 0 do
          if Assigned(AList.Items[I]) then
          TRetailOffline(AList.Items[I]).Free;
      finally
       AList.Free;
      end;
    end;
      

  5.   

    楼主这句会执行吗??????for i :=0 downto  100000 do
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
            MyObj : TMyObj;
            aMyObj : ^TMyObj;
            i : integer;
            aList:TList;
    begin
                    aList:=TList.Create;
                    for i := 0 to 100000 do
                    begin
                            MyObj := TMyObj.Create() ;
                            MyObj.Foo;
                            aList.Add(myobj);                end;
                    for i :=0 downto  100000 do
                    begin
                            aMyObj:=aList.Items[i];
                            FreeAndNil(aList.Items[i]);  //这样是可以的                        dispose(aMyObj);    //或者这样也可以
                             
                    end;
                    FreeAndNil(aList);
    end;