Es ist keine Delphi Fehlermeldung die eine bestimmte Zeile im Code bemängeln könnte, sondern eine Meldung, ass nach dem Beenden des Programms noch etwas nicht freigegeben wurde. Dass FastMM4 überhaupt den Objekttyp erkennt finde ich schon gut.
Frühlingsrolle hat folgendes geschrieben: |
Auf einen Selbstversuch mit FastMM4, deiner Klasse und deinem Beispiel (mit meinen Verbesserungsvorschlägen) komme ich zu dem Entschluss, dass FastMM4 nichts zu bemängeln hat |
Normalerweise macht es das auch nicht. Du musst dafür die FastMM4Options.inc anpassen. Ich hab hier mal gesammelt was bei bei mir alles eingeschaltet ist:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| {$define UseCustomFixedSizeMoveRoutines} {$define UseCustomVariableSizeMoveRoutines} {$define ASMVersion} {$define DetectMMOperationsAfterUninstall} {$define FullDebugMode} {$define RawStackTraces} {$define LogErrorsToFile} {$define LogMemoryLeakDetailToFile} {$define AlwaysAllocateTopDown} {$define SuppressFreeMemErrorsInsideException} {$define EnableMemoryLeakReporting} {$define HideExpectedLeaksRegisteredByPointer} {$define ForceMMX} {$define EnableBackwardCompatibleMMSharing} |
EnableMemoryLeakReporting ist auf jeden Fall das Entscheidende.
Für FullDebugMode musste ich noch die FastMM_FullDebugMode.dll in mein Projektordner kopieren - sonst hat die Delphi nicht gefunden.
Frühlingsrolle hat folgendes geschrieben: |
Außerdem ist deine Code-Formatierung nicht so gut: |
Ich möchte mich nur ungern über Formatierung streiten. Ich weiß, dass mehrere Befehle pro Zeile nicht gern gesehen sind. Das ist eh erstmal nur eine komprimierte aber übersichtliche Version (nach dem Motto 'Alles auf einen Blick'), in der ich einfacher etwas hinzufügen kann und gleichzeitig überprüfen, ob die Befehle und rechnungen mit den anderen Overloads übereinstimmen. Falls ich es irgendwann doch mal veröffentlichen möchte, oder irgendwie weitergeben, muss ich sowiso erst noch Kommentieren, und dann wird auch diese gepackte Struktur hinfällig.
Da wäre deine Variante, jeweils auf die (x,y,z)-Funktion zuzugreifen eigentlich nicht verkehrt - nur muss ich dafür erst wieder eine weitere prozedur aufrufen - das kommt mir performancemäßig nicht ganz richtig vor - aber eigentlich ist es vernünftig. Ich glaube, das werde ich übernehmen
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)