1可能你忘了
setlength(a,Componentcount);lst :Tstrings;lst := TListstring.create;
lst.add
lst.free

解决方案 »

  1.   

    在使用之前先setlength(a,Componentcount);
    不使用了再setlength(a,0)
    lst :TListString;lst := TListstring.create;
    lst.add()
    lst.free 
      

  2.   

    谢谢
    newyj(老鬼) 
    xxmmmx(踢踏) 
    我的Tstringlist是函数返回的,我在那里create和free?是调用处吗
    另外:我如果声明一个全局的tstringlist,而在一个函数中调用时,我怎么判断是否应该create?
      

  3.   

    用前  SetLength(a, ComponentCount);
      

  4.   

    再次谢谢各位:
    我的Tstringlist是函数返回的,我在那里create和free?是调用处吗
    另外:我如果声明一个全局的tstringlist,而在一个函数中调用时,我怎么判断是否应该create? 
      

  5.   

    TstringList在函数内部create,在调用完毕后由调用者Free;即:
    function b:TStringList;
    var
      vsl:TStringList;
    begin
      vsl:=TStringList.Create;
      ......
      Result:= vsl;
    end;procedure a;
    var 
      sl:TStringList;
    begin
      sl:= b;
      ....
      sl.Free;
    end;
      

  6.   

    TO: ai_daoluan(捣乱)  这样也行?!  showmessage(sl[1]); // 运行正常,显示空,CTRL_F7也能显示为'' ????!!!!
      sl := b;
      showmessage(sl[1]);
      sl.Free;
      showmessage(sl[1]); // 内存读错,情理之中!  能否告知
      

  7.   

    ai_daoluan(捣乱),你的方法我还没试,但这种写法好像太别扭,还得让函数的使用者处理函数内部资源的释放?
      

  8.   

    to ai_daoluan(捣乱),你的方法我试过了,ok 
    但这种写法好像太别扭,得让函数的使用者处理函数内部资源的释放? 能给我指导一下?
    to szchengyu(cy) 
    showmessage(sl[1]);
      sl.Free;   //这里的sl释放的是vsl的内存地址,你在sl释放后不能再使用它
      showmessage(sl[1]); // 内存读错,情理之中!  
      

  9.   

    我是说第一句有古怪,sl还没Create,怎么能取它的值呢? 不能理解!showmessage(sl[1]); // 运行正常,显示空,CTRL_F7也能显示为'' ????!!!!
      
      

  10.   

    szchengyu(cy) :  因为sl:= b;//b返回的是tstringlist类型
      vsl的内存地址被赋给了sl,因此sl不用创建,但必须释放  我已经试过了,可以 但我觉得这样不太规范,谁可以解释一下
    另外我想问一下:delphi的数组或Tstringlist支持多少个元素? 3000行吗?是否与内存大小有关?
      

  11.   

    3000行吗?不。3000*3000行吗?不。
    MaxInt
      

  12.   

    要说规范,我只能想到用 var  参数,据说 var 参数比函数返回值的速度还要快procedure b:TStringList(var vsl: TStringList);
    begin
      vsl.Add('abc');
      ......
    end;var
      sl: TStringList;
    begin
      sl := TStringList.Create;
      b(sl);
      ...
      sl.Free;
    end;