function TserverFrmMain.GetNewsFileList(dt1:Longint;dt2:Longint):TStringList;
var
  Temp:Longint;
  S1:String;
  vSearchRec: TSearchRec;
begin
    Result := TStringList.Create;
    S1 := DateTimeToStr(GetDate(Temp));   //得到时间文件夹名
    if FindFirst('D:\test\*.*', faAnyFile and not faDirectory,vSearchRec) = 0 then
    begin
      repeat
       Result.Add(vSearchRec.Name);
      until FindNext(vSearchRec) <> 0;
      FindClose(vSearchRec);
    end;
   //Result.Free;  //这里不能加释放,会报错
end;
内次调用这个函数,内存都会增长,不知道怎么释放啊.Free语句不能写,一写就抱内存读取错误。
请指教.

解决方案 »

  1.   

    你可以试试这样写
    procedure TserverFrmMain.Button1Click(Sender Tobject);
    var
       FileList:TStringList;
    begin
       FileList :=TStringList.Create;
       GetNewsFileList(0,0,FileLIst);
    end
    function TserverFrmMain.GetNewsFileList(dt1:Longint;dt2:Longint;var List:TStringList):integer;
    var
      Temp:Longint;
      S1:String;
      vSearchRec: TSearchRec;
    begin
        Result := 0;
        S1 := DateTimeToStr(GetDate(Temp));   //得到时间文件夹名
        if FindFirst('D:\test\*.*', faAnyFile and not faDirectory,vSearchRec) = 0 then
        begin
          repeat
           List.Add(vSearchRec.Name);
          until FindNext(vSearchRec) <> 0;
          FindClose(vSearchRec);
        end;
       Result := List.count; 
    end;
      

  2.   

    你可以试试这样写
    procedure TserverFrmMain.Button1Click(Sender Tobject);
    var
       FileList:TStringList;
    begin
       FileList :=TStringList.Create;
       GetNewsFileList(0,0,FileLIst);
    end
    function TserverFrmMain.GetNewsFileList(dt1:Longint;dt2:Longint; List:TStringList):integer;
    var
      Temp:Longint;
      S1:String;
      vSearchRec: TSearchRec;
    begin
        Result := 0;
        S1 := DateTimeToStr(GetDate(Temp));   //得到时间文件夹名
        if FindFirst('D:\test\*.*', faAnyFile and not faDirectory,vSearchRec) = 0 then
        begin
          repeat
           List.Add(vSearchRec.Name);
          until FindNext(vSearchRec) <> 0;
          FindClose(vSearchRec);
        end;
       Result := List.count; 
    end;
      

  3.   

    until FindNext(vSearchRec) <> 0;
    ====
    不是until FindNext(vSearchRec) = 0;么?
      

  4.   

    Result := TStringList.Create;
    没有释放,当然内存涨了。 不要这样写,不好。就是弄成一个参数传进来。外面创建好再传入,用完外面释放,就OK了。
      

  5.   

    晕。。好想晕,TSTRINGLIST是自行释放类型,你光创建又不释放它。。
    Result := TStringList.Create;
    如果你这么写,就得在函数外释放!!!
    最好用指针
      

  6.   

    你可以这样写
    function A: TStringList;
    begin
     Result := TStringList.Create;
     ....
    end;procedure B;
    var
     C: TStringList;
    begin
     C := A;
     // do something;
     C.Free; //用完释放,
    end;