Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi StringToOleStr verursacht Memory Leak (https://www.delphipraxis.net/58518-stringtoolestr-verursacht-memory-leak.html)

Bernhard Geyer 8. Dez 2005 10:58


StringToOleStr verursacht Memory Leak
 
Für alle die öfters mal StringToOleStr verwenden sollten:

Merkt euch den zurückgegebene Pointer, denn dieser muss wieder mittels SysFreeString freigegeben werden.
Dies ist nicht in der Hilfe vermerkt (D6). Auch kann man SysFreeString nicht in der Delphi-Hilfe finden da es ein direkter Win32-API-Call ist (was StringToOleStr nicht ist).

marabu 8. Dez 2005 11:43

Re: StringToOleStr verursacht Memory Leak
 
Hallo Bernhard,

danke für diese Info - gilt übrigens auch für D7. SysFreeString() wird in Unit ActiveX importiert.

Grüße vom marabu

Union 8. Dez 2005 11:55

Re: StringToOleStr verursacht Memory Leak
 
Man kann es auch so direkt einbinden:
Delphi-Quellcode:
procedure SysFreeString(const S: WideString); stdcall;
  external oleaut name 'SysFreeString';
Ich habe diese Verhalten auch bei SetString festgestellt. Und dieses wird durch die beliebte Explode Funktion aufgerufen. Deshalb verwende ich Explode jetzt z.B. immer so:
Delphi-Quellcode:
aParts := Explode('/', sName);
for iName := 0 to length(aParts) -1 do
begin
   ...
   SysFreeString(aParts[iName]);
end;
Mir lief nämlich irgendwann der Speicher bei einer Kundenanwendung, die pausenlos läuft zu.

Flocke 17. Dez 2005 10:41

Re: StringToOleStr verursacht Memory Leak
 
Welche Explode-Variante benutzt du denn?

Union 17. Dez 2005 13:25

Re: StringToOleStr verursacht Memory Leak
 
Diese Explode von jbg


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz