1.Function过程返回一个TStringlist,那这个TStringlist要在过程里Create和Free吗?用完了要Free.2.如何建立Array of TStringlist这样的类型?如何释放?FStrings: array[0..10] of TStringList;for i:=0 to 10
  FStrings[I]:=TStringList.Create;.......................for i:=0 to 10
  FStrings[I].Free;

解决方案 »

  1.   

    关于第一个问题,请问是要在Function里FREE掉吗,但这样好像不能返回值了,如果在外面FREE那是怎么操作的?
      

  2.   

    > 关于第一个问题,请问是要在Function里FREE掉吗,但这样好像不能返回值了,如果在外面FREE那是怎么操作的?两个考虑:1.外面建,外面Free;procedure DoSomething(Strings: TStrings);
    begin
      ..........
    end;2.function里建,外面Free;function DoSomething(.....): Strings: TStrings;
    begin
      result:=TStringList.create;
      ..........
    end;
      

  3.   

    2.function里建,外面Free;function DoSomething(.....): TStrings;
    begin
      result:=TStringList.create;
      ..........
    end;
      

  4.   

    假如你要返回这个对象你就不能在function里面释放啊..否则你返回的就是一个释放了的指针.他们都是指向同一个引用地址的, 我是这么理解的.
      

  5.   

    根据谁create谁free的原则,最好是给函数传递一个tstrings,函数只负责构建它的逻辑
    function RetStrings(const sLi: Tstrings; s: string; rCount: integer): boolean;
    var
     i:integer;
    being
      result := true;
      // 本函数目的为构造一个有 rCount 行、内容为 s 的 Strings
      // 构造成功返回true,反之
      try
        for i := 0 to rCount - 1 do
          sli.Append(s);
      except on e: exception do
          result := false;
      end;
    end;// 调用
    var
      sli: TStringList;
    begin
      sli := TStringList.Create;
      if RetStrings(sli, '洗洗更健康', 20) then
        ShowMessage(sli.Text)
      else
        ShowMessage('构建 Strings 失败');  sli.Free;
    end;
    TStringList 数组可以定义成动态数组,在使用时根据需要用SetLenght自行扩充长度
    TStringsArray = array of TStrings;如果你的delphi版本支持泛型,直接这样声明变量 sLi:TList<TStringList>;
    然后可以用sli.add、sli.remove这些方法管理列表项更方便
      

  6.   


    TObjectList<TStringList>更合适些,OwnObjects可自行释放TStringList。