AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Memory-Leak in TObjectList??

Ein Thema von EConvertError · begonnen am 3. Jul 2004 · letzter Beitrag vom 10. Jul 2004
Antwort Antwort
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#1

Memory-Leak in TObjectList??

  Alt 3. Jul 2004, 19:40
Hallo!

Ich habe gerade eine sehr seltsame Erscheinung:
Und zwar möchte ich die TObjectList verwenden, jedoch meldet mir das Programm MemProof immer ein Memory Leak.

Ich hab mal ein leeres Projekt erzeugt und Folgendes hinzugefügt. Auch da ist das Problem existent (schöner Satz ):

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  List: TObjectList;
begin
  List:= TObjectList.Create(TRUE);
  List.Free;
end;
Ich benutze Delphi 7 Professional, auf Windows XP Pro.

Was kann ich da tun? Gibt es da wirklich ein Memory Leak? Kann ich jetzt die TObjectList nicht verwenden?

mfg,
EConvertError
Andreas N.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer
Online

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Memory-Leak in TObjectList??

  Alt 4. Jul 2004, 20:13
Also ich verwende MemCheck und TOBjectList ohne Probleme. Evtl. liegt das Problem bei MemProof?
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#3

Re: Memory-Leak in TObjectList??

  Alt 4. Jul 2004, 20:26
Erstmal Danke für die Antwort.

Als ich habe jetzt einmal ein ganz leeres Projekt kompiliert und mit MemProof geprüft. Das Leak taucht auch da auf!

Also liegt nicht an der TObjectList, sondern an etwas ganz anderem. Nun hoffe ich, dass es nicht an meinem Delphi liegt. Seltsamerweise hat MemProof immer gut funktioniert.
Jetzt zeigt er mir immer an, dass ein VirtualMemory mit der Größe 4096 nicht freigegeben worden ist. Und das auch bei einem Programm, das ganz sicher Memory-Leak frei ist.

Ich werd mal das MemCheck testen....

mfg,
Andy
Andreas N.
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: Memory-Leak in TObjectList??

  Alt 4. Jul 2004, 20:55
Hallo

die 4096 sind normal, siehe hier: http://www.delphi-groups.de/YaBBSe/i...=20029;start=0 (letztes post von AHUser)

Aber ich glaube eher, das du memproof nicht richtig anwendest. Aktivier die Häkchen in den delphi-optionen, so wie es in der hilfe von memproof beschrieben ist. Dann siehst du genau, wer wirklich für ein evtl. Speicherleck verantwortlich ist.

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#5

Re: Memory-Leak in TObjectList??

  Alt 5. Jul 2004, 13:19
Danke für die Antwort.

Wie meinst du das: "die 4096 sind normal"?

Ich werde daraus:
Zitat:
Das ist ein MakeObjectInstance Aufruf. Der Speicherbereich wird nie mehr freigegeben (außer nach dem Beenden durch Windows selbst). Es ist aber etwas statisches, das nur einmal reserviert wird und nicht wiederholt reserviert wird.
...nicht schlau. Sind das jetzt Leaks oder nicht? Wenn ja: Sind Delphi Programme dann unsauber?
Und wenn das normal ist: Wie ist es dann möglich, dass ich schon Programme hatte, die dieses 4096 Problem nicht hatten, und ich jetzt das Problem schon habe?

Ich habe bei meinem MemProof keine Hilfe dabei (Habs direkt von der MemProof-Seite gezogen).
Bei den Compileroptionen habe ich "Optimierung" ausgeschaltet, bzw."StackFrames" und bei "Debug" alles eingeschaltet.Weiters habe ich beim Linker noch die TD32-Infos aktiviert.
Stimmt das so?

mfg,
EConvertError
Andreas N.
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#6

Re: Memory-Leak in TObjectList??

  Alt 10. Jul 2004, 11:18
Hallo noch einmal!

Mir hat die ganze Sache keine Ruhe gelassen, und ich habe weitergeforscht. w3seek und ich haben festgestellt, dass dieses Leak wirklich auftritt und nicht mein Delphi irgendwie kaputt ist.

Jetzt habe ich folgendes gefunden (Google,http://www.elists.org/pipermail/delp...er/012626.html ):

Zitat:
> I'm MemProof-ing some of my apps, and came across a "Virtual Memory"
> leak. The code it points to is in Forms.pas, the
> MakeObjectInstance(Method: TWndMethod)
> function. The variable Block (PInstanceBlock) is not freed within the
> function.

It shouldn't be freed there. Block is being used as a temporary variable
for extending a linked list. When InstFreeList is nil, there is no more
room in the are reserved for holding object instances (InstBlockList).
InstFreeList points to the free area. Another page of memory is reserved
and tacked onto the end using Block to hold the location.

> It's been a while since I dealt with Lists (which is what this seems
> to be operating on), but isn't that correct? Isn't it that you can't
> free the pointer to the item you just added to the list?

Call FreeObjectInstance. It moves the object instance space back onto the
list of free spots.

> So. Assuming the VCL code is doing what it *should* be doing, what
> could my app have done to generate this leak? It only occurs in one
> of the apps I've proofed.

You are right: the memory is never freed. That is by design. The est you
can do is contain the memory "leak." Call FreeObjectInstance when you can.
MakeObjectInstance only allocates more memory when it runs out of its
original allocation.

As I said, this behavior is by design. The memory is never really leaked
since InstFreeList and InstBlockList are always pointing to it or to
something that points to it. The only time that memory is truly leaked is
after your program finishes, at which point Windows frees any memory for
you anyway.

--Rob
Es ist also kein richtiges Leak, sondern wird sowieso freigegeben, wenn mein Programm beendet wird. Nur was bedeutet das "FreeObjectInstance"? Wo und wann soll ich das Aufrufen?

Die zweite Sache, die ich gefunden habe, ist:
Zitat:
> The only time that memory is truly leaked is
> after your program finishes, at which point Windows frees any memory for
> you anyway.

Thanks. Odd thing, though. When I first ran MemProof on it, that
"leak" wasn't there, but others were. After I fixed the others, that
one showed up. Ah, well.
Ich bin also nicht der einzige, der diese Meldung früher nicht hatte.
Vielleicht hilft das auch jemand anderem.

mfg,
EConvertError
Andreas N.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Memory-Leak in TObjectList??

  Alt 10. Jul 2004, 12:10
Komich, hab memproof grad mal auf ein etwas größeres Project angewendet welches dann auch bestimmt ne viertel Stunde geladen hat und aus irgendeinem grund bekommt memproof da nicht mit wenn ich das programm beende und somit werden auch keine memory-leaks angezeigt
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:44 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