function TForm1.DoCopyTStrings(A: TStrings): TStrings;
var
  I,nCount: Integer;
  oCopy: TStrings;
begin
  oCopy := TStringList.Create;
  nCount := A.Count;
  for I := 0 to nCount - 1 do
  begin
    oCopy.Add(A[I]);
  end;
  Result := oCopy;
  oCopy.Free;     
end;
我写了这么一个函数用于复制一个TStrings
在另外一个函数中调用这个函数  oTime := DoCopyTStrings(ArrTime);
ArrTime是一个TStrings,长度是3
oTime的长度就是0
是不是因为执行了oCopy.Free; 如果去掉这句  oTime的长度就是3了  但是会内存溢出啊    求解  

解决方案 »

  1.   

    直接
    Dest: TStrings;Dest.Assign(Source);不行吗?
      

  2.   

    你在函数中已经释放了访问当然内存错误了。 如果不加这句外面没有释放会产生内存泄露,使用时要在外部自己释放才行
    。可以这样定义
    Procedure TForm1.DoCopyTStrings(A: TStrings;var B:TStrings); ,外部创建好传入B,
    在内部B不要创建,只管复制就好了
      

  3.   

    就是Free的原因,在delphi里面对函数要非常强的安全机制,因此不用free,系统在执行完后自动free。
    你在之前free了,当然为0了。
      

  4.   

    function TForm1.DoCopyTStrings(A: TStrings): TStrings;
    var
      I,nCount: Integer;
    begin
      Result := TStringList.Create;
      nCount := A.Count;
      for I := 0 to nCount - 1 do
      begin
        Result .Add(A[I]);
      end; 
    end;调用:var
      T: TStrings;
    begin
      T := DoCopyTStrings(A);
      //dosomething with T
      T.Free;
    end;