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.   


      Result := TStringList.Create;
      for I := 0 to A.Count - 1 do
      begin
        Result.Add(A[I]);
      end;调用DoCopyTStrings之后释放var
      s: TStrings;
    begin
      s := DoCopyTStrings();
      ...........
      s.Free();
    end;
      

  2.   

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

  3.   

    我的就是那么写的 应该像2楼那么做  delphi中谁创建谁释放
      

  4.   

    复制TStrings不用自己写函数呀,直接这样行了:
    a.Assign(b);
    或者a.AddStrings(b);
    就行了
      

  5.   

    如果要复制的话,在外边创建一个TStringList的变量,然后进去复制,不过复制TStringList直接用Assign了。
      

  6.   

    Delphi就是谁创建谁 释放  因为释放掉了  所以传不过去了