Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.154 Beiträge
 
Delphi 12 Athens
 
#5

AW: String MemoryLeak

  Alt 20. Aug 2010, 16:19
Das Pos+Copy kannst du weglassen und die Automatik dafür nutzen:
Delphi-Quellcode:
function TTwixapi.GetMainEntry(ID_MainEntry: Integer): AnsiString;
begin
   SetLength(Result, 1023);
   //if TwixGetMainentry(ID_MainEntry, @pTmpStr[0], 1023+1) then
   if TwixGetMainentry(ID_MainEntry, @pTmpStr[0], Length(Result)+1) then
      Result := PAnsiChar(Result)
   else
      Result := '';
end;
(ein String hat noch eine #0 hinten dran, für die PChar-Kompatibilität)

Delphi-Quellcode:
function TTwixapi.GetMainEntry(ID_MainEntry: Integer): AnsiString;
var
   TmpStr: Array[0..1023] of AnsiChar;
begin
   //if TwixGetMainentry(ID_MainEntry, @TmpStr[0], 1024) then
   if TwixGetMainentry(ID_MainEntry, @TmpStr[0], Length(TmpStr)) then
      Result := @TmpStr; // oder Result := PAnsiChar(@TmpStr)
   else
      Result := '';
end;
Nur kann ich mir nicht vorstellen, wie bei deiner 1. Variante (in Post #1) dieses Speicherleck entstehen soll.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (20. Aug 2010 um 16:37 Uhr)
  Mit Zitat antworten Zitat