是不是用到了Tstrings的Objects属性,如果是这样,先要释放Objects指向的内存然后再来释放Tstrings。

解决方案 »

  1.   

    那你就重新扩展TStrings了,在Free的时候对数据进行内存释放。
      

  2.   

    没有,我就是使用ADD过程,把一些字符串加到了TSTIRNGS里,
    各位帮帮忙啊,,试试看,怎么解决这个问题,
      

  3.   

    gfzhx(小小)用什么函数来进行内存释放,
      

  4.   

    如果只是使用ADD过程来加入一些字符串,TSTIRNGS类会自己处理的。我的一个程序中也使用了大量的TSTIRNGS类,并没有你说的这种现象。但是如果你使用了AddObject方法,那么你就得象楼上kmzym说的,先要释放Objects指向的内存然后再来释放Tstrings。使用NEW方法就必须使用Dispose方法来释放。
      

  5.   

    最好你把string设为过程内部变量,过程执行完,delphi自动释放;如果你的是全局变量的话,就用allocmem和freemem来试一下;实在不行,在最后如onclose中,string1:='';
      

  6.   

    代码复杂,给为可以用下面的代码来模拟
    tmpString := TStringList.Create;
    try
      for iLoop := 0 to 10000 do
      begin
        tmpString.Add('kljlkjlkjlkjlkjlkjlk')
      end;
    finally
      tmpString.Free;
    end;
      

  7.   

    应该不会吧,我又看了TSTRINGLIST类Destroy,下面是具体实现destructor TStringList.Destroy;
    begin
      FOnChange := nil;
      FOnChanging := nil;
      inherited Destroy;
      if FCount <> 0 then Finalize(FList^[0], FCount);//释放内存
      FCount := 0;
      SetCapacity(0);
    end;
      

  8.   

    通过任务管理器观察程序内存,有时看到的不是时时的内存情况,如果你只是用Tstring来存储字符串,调用free就可以了,系统会负责释放字符串的内存空间的。你把应用程序最小化,然后还原,任务管理器的内存大小就会刷新变小了。