photor hat geschrieben: Fr 5. Mär 2021, 20:12
Aber Heaptrc gibt mir bei mehreren Leaks die selbe Stelle im Code an. Werden jetzt mehrere Speicherblöcke nicht mehr freigegeben

(es handelt sich teilweise um die MainForm.Create-Prozedur, die ja nun nur einmal durchlaufen wird.
Ciao,
Photor
Hi!
Ja, das ist der Ärger, den ich schon oben erklärt habe.
Also nochmal simple:
Procedure A hat das Speicherleck. Wenn es das Ende der Verweis-Kette ist, muss man hier suchen.
Aber:
Procedure C ruft Procedure B ruft Procedure A:
Alle 3 Proceduren werden angezeigt, weil C und B ja das Speicherleck von A "erben".
Also immer im Quellcode sich von Zeile zu Zeile hangeln, bis von der Zeile kein Verweis mehr auf andere Zeilen folgt. Innerhalb der Procedure muss irgendwo das Malheur passiert sein.
Wenn man mein obiges Beispiel nimmt arbeitet man topdown:
$00000000004646A6 LOADKDEDECK, line 325 of skat1.pas
$00000000004674AD FORMCREATE, line 974 of skat1.pas
$000000000044EE47 DOCREATE, line 939 of include/customform.inc
$000000000044CABD AFTERCONSTRUCTION, line 149 of include/customform.inc
$0000000000455634 CREATE, line 3184 of include/customform.inc
$000000000045F955 CREATEFORM, line 2239 of include/application.inc
$000000000041F05E main, line 19 of skat.lpr
main in der lpr ruft CreateForm, das ruft Create, taucht ab in die internen Functionen der Form nämlich AfterConstrution und DoCreate. Nun bist Du wieder beim "Heimspiel" - nämlich FormCreate. Da rufst Du LoadKdeDeck - und von hier gibt's keine weiteren Verweise. Als muss hier irgendwo der Fehler stecken. Dass er nun keinen weiteren Verweis auf die bewusst fehlerhaft gemachte BGRArotate90 macht, ist mir auch nicht klar. Aber Du bist schon mal in der richtigen Region:
Du musst also alles, was in diesem Fall in LoadKdeDeck gerufen wird, überprüfen. Irgendwo hier muss es sein.
Um sich nicht völlig zu verirren: In Zukunft zwischendurch immer mal heaptrc checken lassen, ob man in der letzten Stunde irgenwo nen Bolzen eingebaut hat. Wenn man am Ende des Projects auf die Jagd nach 23 Fehlern gehen muss, wird es echt unübersichtlich.
Keep on hackin'
Winni