for i:=1 to 3 do
begin
Image := TImage.Create(Form1);
      with Image do
      begin
        Parent := Form1;
        Left := ImageLeft;
        Top := ImageTop;
        Width := ImageWidth;
        Height := ImageHeight;
        image.Picture.LoadFromFile('F:\delphi制作\loadpic\'+inttostr(i)+'.bmp');
      end;
ImageLeft:=ImageLeft+60;
end;
以上代码存在内存泄露问题,那如何回收内存,是回收三副呢,还是一幅:
也就是说是:
for i := 1 to 3 do
begin
  image.free;
end;
还是 
 image.free 这样一句就可以了,为什么?
请高手指点一下,谢谢!在线等!

解决方案 »

  1.   

    如果你以后还要操作它们,  那就不要用一个名字
    image1 := TImage.Create...
    image2 := TImage.Create...
    image3 := TImage.Create...释放直接释放就行了
    image1.Free;
    image2.Free;
    image3:Free;
    (如果你不需要重新创建的话,  Free都不用了窗体释放的时候它们自然会释放,当然前提是
    imagex := TImage.Creaate(Self);)
      

  2.   

    回收三副for i:=1 to 3 do
    begin
       Image := TImage.Create(Form1);
       ...
       ImageLeft:=ImageLeft+60;
       ImageLeft.free;  //释放
    end;
      

  3.   

    to DWGZ() :
    imagex := TImage.Creaate(Self);)
    跟  Image := TImage.Create(Form1);  有什么两样?
      

  4.   

    //试试下面的创建和释放函数
    var
      YourList:TList;
    procedure CreateImage;
    var
      i:integer;
      Image:TImage;
    begin
       for i:=1 to 3 do
       begin
         Image := TImage.Create(Form1);
         YourList.Add(Image);
         ...
         ImageLeft:=ImageLeft+60;
       end;
    end;
    procedure FreeImage;
    var
      i:integer
    begin
      for i:=0 to YourList.count-2 do
      begin
        TImage(YourList[i]).Free; 
      end;
    end;
      

  5.   

    for i:=1 to 3 do
    begin
    Image := TImage.Create(Self);
          with Image do
          begin
            Parent := Form1;
            Left := ImageLeft;
            Top := ImageTop;
            Width := ImageWidth;
            Height := ImageHeight;
            image.Picture.LoadFromFile('F:\delphi制作\loadpic\'+inttostr(i)+'.bmp');
          end;
    ImageLeft:=ImageLeft+60;
    end;难道这样的代码就不会出现内存泄露吗?(关闭FORM1后自动回收内存)?
      

  6.   

    to xybh97102(冰点) ( ) : 我怎么知道 内存释放了?
      

  7.   

    像 4water(4点水) 说的就可以了呀
      

  8.   

    或这样
    Image := TImage.Create(Form1);
    InsertControl(Image);
    就不用手工释放了,由Form自己释放