AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Warum meckert FastMM hier ein Speicherleck an?

Warum meckert FastMM hier ein Speicherleck an?

Ein Thema von Benmik · begonnen am 19. Dez 2018 · letzter Beitrag vom 21. Dez 2018
Antwort Antwort
Seite 1 von 2  1 2   
Benmik

Registriert seit: 11. Apr 2009
560 Beiträge
 
Delphi 12 Athens
 
#1

Warum meckert FastMM hier ein Speicherleck an?

  Alt 19. Dez 2018, 16:47
Delphi-Version: 10.2 Tokyo
Folgender Code:
Delphi-Quellcode:
procedure TForm1.TuWas;
var i:integer;
    Txt:string;
    VerzListe:TStringList;
    PathList:TJamPathList;
begin
  ...
  PathList := TJamPathList.Create; // TJamPathList = TStringList
  VerzListe := TStringList.Create;
  VerzListe.Sorted := True;
  VerzListe.Duplicates := dupIgnore;
  Try
    ...
    For i := PathList.Count - 1 downto 0 do
      VerzListe.Add(ExtractFileDir(PathList[i]));
  Finally
    PathList.OwnsObjects := True;
    FreeAndNil(PathList);
    VerzListe.OwnsObjects := True;
    FreeAndNil(VerzListe);
  End;
Der Memory-Manager meldet:
Zitat:
This application has leaked memory. The small block leaks are (excluding expected leaks registered by pointer):

13 - 20 bytes: UnicodeString x 1
85 - 100 bytes: TJamPathList x 1
Ich bin dem Code bis in System und System.Classes gefolgt, alles verläuft ordnungsgemäß.
Ich habe die Strings der Liste manuell auf '' gesetzt und alles Mögliche - FastMM meint, da sei ein Speicherleck.
Kann das sein, dass FastMM da Unsinn berichtet?

Geändert von Benmik (19. Dez 2018 um 17:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Warum meckert FastMM hier ein Speicherleck an?

  Alt 19. Dez 2018, 16:52
In deinem Code kann man nicht sehen ob/wo PathList:TJamPathList erstellt wird.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Der schöne Günther
Online

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Warum meckert FastMM hier ein Speicherleck an?

  Alt 19. Dez 2018, 16:57
Oder was es überhaupt ist. Laut diesem Link soll gelten TJamPathList = class(TFilenameList); aber was nun ein TFilenameList ist habe ich nirgendwo im Internetz finden können...
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Warum meckert FastMM hier ein Speicherleck an?

  Alt 19. Dez 2018, 17:01
Hallo,
sicher, dass es genau diese Stelle ist?

Mache doch mal ein

Delphi-Quellcode:
PathList:= TJamPathList.Create;
try
  PathList.Add('Bla');
finally
  PathList.Free;
end;
Heiko
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
560 Beiträge
 
Delphi 12 Athens
 
#5

AW: Warum meckert FastMM hier ein Speicherleck an?

  Alt 19. Dez 2018, 17:10
Steht in Shell_Win32: TFilenameList = TStringList; Ich habe es oben eingefügt. Ich hielt es nicht für wichtig, die Verzliste allein würde doch genügen. Ich habe es nur mit aufgenommen, da beide angemeckert werden.

@hoika:
Wenn ich nur
Delphi-Quellcode:
  JamPathList:= TJamPathList.Create;
  try
    JamPathList.Add('Bla');
  finally
    JamPathList.Free;
  end;
ausführe, bleibt FastMM stumm.
Was soll das bedeuten? Sowohl PathList als auch VerzListe sind lokale Variablen.

Ouuh, das war ein guter Hinweis. Die JamPathList wird in einer Routine GetListOfAllFiles gefüllt, in der die Liste nicht nur gefüllt, sondern auch erzeugt wird (!). PathList := TJamPathList.Create; mal weggelassen, funktioniert nicht nur, sondern die Warnung ist auch weg. Und zwar die Warnung bei Verzliste auch. Da komme ich vielleicht auch selbst dahinter, warum das so ist.

Geändert von Benmik (19. Dez 2018 um 17:19 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Warum meckert FastMM hier ein Speicherleck an?

  Alt 19. Dez 2018, 17:13
Hallo,
Zitat:
Was soll das bedeuten?
Das bedeutet, dass Du uns nicht den ganzen Code gezeigt hast.
Zeige doch mal etwas mehr Code, siehe weiter oben.
Vielleicht ist es auch eine völlig andere Stelle?

OK. hast du
Was soll das OwnsObject?

Klammere alles aus, was in Deinem ... steht.
Auch das Sorted und Duplicates erst mal weg.

Dann immer weiter Code reinnehmen, bis Du die Stelle gefunden hast.


Und zuletzt läßt sich Dein Code gar nicht kompilieren

PathList:TJamPathList;
begin
...
JamPathList := TJamPathList.Create; // TJamPathList = TStringList
Heiko

Geändert von hoika (19. Dez 2018 um 17:33 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Warum meckert FastMM hier ein Speicherleck an?

  Alt 19. Dez 2018, 17:15
Du hast PathList und JamPathList...eins davon gibst du nicht frei.
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
560 Beiträge
 
Delphi 12 Athens
 
#8

AW: Warum meckert FastMM hier ein Speicherleck an?

  Alt 19. Dez 2018, 17:16
Du hast PathList und JamPathList...eins davon gibst du nicht frei.
Tut mir leid, das sind die gleichen Variablen, ich hatte das JamPathList einfach auf PathList gekürzt...

Das OwnsObject und Sorted sind Überbleibsel von meinen Versuchen, das Object manuell zu leeren...

Das war eine rasche Lösung, vielen Dank. Tut mir leid, dass ich mit der wechselnden Verwendung von JamPathList und PathList für Verwirrung gesorgt habe. JamPathList ist eine einfache Stringlist, und ich wollte dem Rätselraten vorbeugen, was eine JamPathList genau ist... Hatte leider einen paradoxen Effekt.

Geändert von Benmik (19. Dez 2018 um 17:23 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Warum meckert FastMM hier ein Speicherleck an?

  Alt 19. Dez 2018, 17:21
Wir brauchen den Code
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Warum meckert FastMM hier ein Speicherleck an?

  Alt 19. Dez 2018, 17:33
Hallo,
hast Du denn jetzt mal alles nicht relevante ausgeklammert?
Heiko
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:21 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