Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Memory Leak mit IBEvents (https://www.delphipraxis.net/160250-memory-leak-mit-ibevents.html)

Rainer Wolff 4. Mai 2011 14:07

Delphi-Version: XE

Memory Leak mit IBEvents
 
Hallo,

ich hab hier mal wieder ein sehr seltsames Phänomen:

Ich habe ein Memoryleak in meiner Application und zur Fehlersuche mal alles auskommentiert, was stört. Im Prinzip besteht mein Projekt jetzt nur noch aus zwei Datenmodulen, von denen das eine die grundsätzliche Datenbankkonfiguration enthält, und das andere formularspezifischere Querys etc.
Auf dem zweiten Formular ist auch eine IBEvents-Komponente, wenn ich die lösche, ist das Memoryleak verschwunden. Aber da steht auch kein Quellcode dahinter, der irgendwie Speicher bucht oder freigibt.

FastMM4 (FullDebugmode) sagt:
Code:
--------------------------------2011/5/4 14:52:25--------------------------------
FastMM has detected an error during a free block scan operation. The block header has been corrupted.

The current thread ID is 0xD30, and the stack trace (return addresses) leading to this error is:
414260 [FastMM4.pas][FastMM4][FastMM4.CheckBlocksOnShutdown][8114]
414FE6 [FastMM4.pas][FastMM4][FastMM4.FinalizeMemoryManager][9184]
41502E [FastMM4.pas][FastMM4][FastMM4.Finalization][9265]
407B28 [System.pas][System][System.FinalizeUnits][15309]
407F02 [System.pas][System][System.@Halt0][16304]
ACA881 [Prodavi][Prodavi.Prodavi][215]
76CE3C45 [BaseThreadInitThunk]
76FD37F5 [Unknown function at RtlInitializeExceptionChain]
76FD37C8 [Unknown function at RtlInitializeExceptionChain]

Current memory dump of 256 bytes starting at pointer address 7FEB6250:
64 82 AE 00 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
Wer kann mir Tipps geben, wie ich hier weitersuchen kann.

Gruß Rainer

Bernhard Geyer 4. Mai 2011 14:11

AW: Memory Leak mit IBEvents
 
Lese dir mal die Meldung durch:

Code:
FastMM has detected an error during a free block scan operation. The block header has been corrupted.
D.h. du hast keine Speicherlücke sondern eine Funktion/Methode schreibt über eigentlich reservierte Speicherbereiche hinaus und zerstört damit die "Sicherungsblöcke" von FastMM um solche ungültigen Speicherschreibzugriffe zu erkennen.

Rainer Wolff 4. Mai 2011 14:34

AW: Memory Leak mit IBEvents
 
Jo, aber der Zusammenhang, bzw. wie ich das Problem näher einkreisen kann, ist mir trotzdem weiterhin schleierhaft.
Wie schon geschrieben, passiert in den beiden Units eigentlich nicht viel, ausser dass ein paar Komponenten initialsiert werden. Und wenn ich eben die IBEvents-Komponente entferne, ist der Zugriffsfehler weg.

himitsu 4. Mai 2011 14:54

AW: Memory Leak mit IBEvents
 
Sowas passiert auch, wenn man auf Objekte zugreift, nachdem diese freigegeben wurden.

FastMM hat die Bereiche mit 80 gefüllt und so wie es aussieht, wurde in diesen Speicherbereich ein "Pointer" reingeschrieben.
Das könnte z.B. die Typ-Zeiger am Anfang einer Klasse sein.

Delphianer 4. Mai 2011 18:17

AW: Memory Leak mit IBEvents
 
Hallo,

ich habe mit XE einen fehlerhaften cast in IBEvents. Wahrscheinlich ist der Fehler ja schon länger drin.

Delphi-Quellcode:
destructor TIBEvents.Destroy;
begin
  try
    if Registered then
      UnRegisterEvents;
  except
    // silence any exceptions which might be raised
    // by UnRegisterEvents during destruction
  end;
  If Assigned(FDatabase) then
    FDatabase.RemoveEventNotifier(Self);
  FThreads.Free;
// LL 06.04.2011
//  IF Assigned(FEvents) then
//    TStringList(FEvents).OnChange := nil;
  FEvents.Free;
// LL 06.04.2011
  IF Assigned(FUniEvents) then
    TStringList(FUniEvents).OnChange := nil;
  FUniEvents.Free;
  FGDSLibrary := nil;
  inherited Destroy;
end;
Unter Umständen ist es dieser Fehler, der bei Dir gemeldet wird.

Lutz

Rainer Wolff 5. Mai 2011 08:01

AW: Memory Leak mit IBEvents
 
Jepp, genau der isses, so wie es aussieht. Der Fehler ist weg.

Danke!

Gruß Rainer


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 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