Any specific difference between TCSVStream and TMemoryStream? lazarus / 21-General ---------------------------------------------------------------------- egsuh · 2025-04-09 11:08 Hello, I've written a procedure that converts datasets to TMemoryStream. Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i function Taq_r_5.SetDataSet(querydef, fieldname, filename: string;DataSet:TDataSet): Boolean;var   turl, tfn : string;   AStrm: TMemoryStream;   AStrl : TStringList;begin   Result:= false;   DataSet.First;   AStrl := TStringList.Create;   AStrm := TMemoryStream.Create;   try      if DataSet <> nil then begin         if uppercase(fieldname) = 'SAMPLELIST'            then (DataSet as TCSVDataSet).SaveToCSVStream(AStrm)   // <==== This is not Freed completely            else (DataSet as TBufDataSet).SaveToStream(AStrm);         tfn := filename;          Astrm.Position:= 0;          turl := url + Format('e/SetDataSet?%s', [querydef]);         Result :=  HttpPostFile(tURL, fieldname, tfn, AStrm, AStrl);         Result:= uppercase(trim(astrl.Text)) = uppercase(BoolToStr(true, true));      end;    finally      AStrl.Free;      AStrm.Free;    // <--- it should be freed finally   end;end;  SaveToStream to a MemoryStream variable works ok.  But SaveToCSVStream to a MemoryStream variable is not cleared at free. Even though it is not completely freed, it operates correctly. Any reasons? ---------------------------------------------------------------------- Zoran · 2025-04-09 19:20 Quote from: egsuh on April 09, 2025, 01:08:47 pmHello, I've written a procedure that converts datasets to TMemoryStream. Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i function Taq_r_5.SetDataSet(querydef, fieldname, filename: string;DataSet:TDataSet): Boolean;var   turl, tfn : string;   AStrm: TMemoryStream;   AStrl : TStringList;begin   Result:= false;   DataSet.First;   AStrl := TStringList.Create;   AStrm := TMemoryStream.Create;   try      if DataSet <> nil then begin         if uppercase(fieldname) = 'SAMPLELIST'            then (DataSet as TCSVDataSet).SaveToCSVStream(AStrm)   // <==== This is not Freed completely            else (DataSet as TBufDataSet).SaveToStream(AStrm);         tfn := filename;          Astrm.Position:= 0;          turl := url + Format('e/SetDataSet?%s', [querydef]);         Result :=  HttpPostFile(tURL, fieldname, tfn, AStrm, AStrl);         Result:= uppercase(trim(astrl.Text)) = uppercase(BoolToStr(true, true));      end;    finally      AStrl.Free;      AStrm.Free;    // <--- it should be freed finally   end;end;  SaveToStream to a MemoryStream variable works ok.  But SaveToCSVStream to a MemoryStream variable is not cleared at free. Even though it is not completely freed, it operates correctly. Any reasons? What do you mean? This code does not do anything after calling AStrm.Free, so it doesn't try to access this object after it was freed (and of course it shouldn't try). So how can you tell that the variable operates correctly and that it is not completely freed? Please try to explain better what you mean. ---------------------------------------------------------------------- egsuh · 2025-04-10 02:49 QuoteSo how can you tell that the variable operates correctly and that it is not completely freed? Heaptrack says some memories are not freed.