Registriert seit: 29. Mär 2009
439 Beiträge
|
Re: Memory-Leak finden
25. Jul 2009, 09:44
Nach meiner Erfahrung hilft hier nur Versuch-und-Irrtum und ein selbstkritischer Blick in den Quellcode. Zunächst beseitige ich immer die Speicherlecks, die mit nicht freigebenen Objekten zusammenhängen, denn diese sind am leichtesten zu finden.
Bei solchen Fehlern sind die verdächtigen Kandidaten gerne mal Records mit enthaltenen Strings. Bei Records wird die Type-Information lediglich vom Compiler verwaltet. Sie stehen zur Laufzeit also nicht mehr zu Verfügung. Das ist auch der Grund weshalb FastMM keine weiteren Type-Informationen zu Verfügung stellen kann. Wenn man diese Records dynamisch erstellt und der Zeiger dann fröhlich im Programm durch die Gegend wandert, dann geht dem Compiler schon mal die Type-Information verloren und er weiss dann nicht mehr, daß er auch noch Strings freigeben muss (siehe: Finalize). Man sollte also versuchen, die Programmteile in denen solche Records erstellt werden, einfach mal wegzulassen. Man kann auch mal schaun, ob man mal eine unterschiedlich Anzahl von Records erstellen lassen kann - wie entwickelt sich das Speicherleck dann?
|