procedure TForm1.Button1Click(Sender: TObject);
var
List:TStringList;
Bit:TBitMap;
begin
List:=TStringList.Create;
Bit:=TBitMap.Create;
Bit.LoadFromFile('D:\a.bmp');
List.AddObject('123',Bit);
BP:=Bit;
LP:=List;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
TStringList(LP).Free;
TBitMap(BP).SaveToFile('d:\qiubmp.bmp');
end;为什么bit这个没有被释放,delphi回自动释放吗?
TStringList(LP).Free; 释放了 里面的对象也应该释放啊

解决方案 »

  1.   

    TStringList的帮助里写明不释放的。
      

  2.   

    楼主的代码当中变量的作用域有什么问题?不要光只看到var
      List:TStringList; 
    ...
    还要注意  ...
      LP:=List; 
    end; 
      

  3.   

    对于TStringList里面的Object不会因为StringList的Free,或者Item的Delete而释放
    但是TObjectList就不一样了。
      

  4.   

    代码写的确实很乱,既然使用了全局变量的lp,就不要再在Button1Click里再创建一个list,再指过去,直接创建lp就行了.
    lp既然要addobject的话,也就是把它当容器了,那你对它里面的object操作就可以根据它的item的name(比如用你上面的123)来查找到TBitMap对象来操作,还要用另外的一个全局变量来操作,这不又给自己添乱吗
      

  5.   

    你那样写怎么可能会被释放
    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      List:TStringList; 
      Bit:TBitMap; 
    begin 
      try
        List:=TStringList.Create; 
        Bit:=TBitMap.Create; 
        Bit.LoadFromFile('D:\a.bmp'); 
        List.AddObject('123',Bit); 
        BP:=Bit; 
        LP:=List;
      finally
        List.Free;
        Bit.free; 
      end 
    end; 
      

  6.   

    TStringList的AddObject加的只是指针,释放TStringList,他引用的对象还是没有释放的