![]() |
Grund für Runtime Error 216 finden
Mein Programm zeigt mir seit einer Umstellung von normalen Arrays auf ein Array auf einen RecordTypen beim Beenden jedesmal einen RT Error 216 (Adresse 00409472)
ich weiß, Dank dem Debugger, auch dass der Fehler in der unit System in der proceudre FinalizeUnits auftritt Aus einigen Threads hier im Forum ebenso das vermutlich ein generiertes Objekt nicht richtig freigegeben wird und beim beenden weiterer Formulare zu dem Fehler führt. Mit diesen Aussagen kann ich nur leider den Fehler nicht finden, da ich nicht weiß wie ich dabei vorgehen soll. Wie macht man denn so etwas? LG Martin |
AW: Grund für Runtime Error 216 finden
Kompiliere dein Projekt mit System Debug-Units und setze einen Breakpoint auf das 'END.' der Hauptanwendung. Dann führe den Rest Schrittweise aus. im FinalizeUnits wird der FinalisierungsCode aller Units nacheinander aufgerufen. In einer davon knallt es. Mit 'schrittweiser Ausführung' findest Du dann die Stelle.
|
AW: Grund für Runtime Error 216 finden
Der Fehler tritt oft auch auf, wenn ein Objekt doppelt freigegeben wird.
Sehr einfach sollte solch ein Fehler mit FastMM zu finden sein. ;-) |
AW: Grund für Runtime Error 216 finden
Stimmt, mit FastMM sollte man anfangen.
|
AW: Grund für Runtime Error 216 finden
Benutzt du Packages?
Sind bei dir Units möglichst immer im Interface eingebunden (uses) oder auch zu oft grundlos in Implementation? Wenn man da z.B. Objektreferenzen ungünstig verwaltet und dann z.B. noch nach dem freigeben der Unit oder eines Packages benutzt, dann dann das schnell mal knallen. Beim "externen"/großen FastMM kann man einige FullDebug-Features einbinden, wo man auch doppelte Freigaben und (schreibende) Speicherzugriffe nach dem Freigeben erkennen lassen kann. |
AW: Grund für Runtime Error 216 finden
Danke euch zunächst schon mal
na dann werde ich mal mit FastMM starten, denn beim debuggen merke ich nur "das" es "knallt" ;) und nicht wieseo |
AW: Grund für Runtime Error 216 finden
Wenn Du mit Arrays arbeitest, kann es auch sinnvoll sein, zu Debugging-Zwecken mal die Bereichsüberprüfung einzuschalten. Array-Grenzen zu verletzen kann zu viel späteren Zeitpunkten für Probleme sorgen.
|
AW: Grund für Runtime Error 216 finden
@Teebee: DAs war "DER" Tipp.
Ich hatte 2 Stellen "Schreibfehler" im Sourcecode die mir früher nie aufgefallen sind. Durch die bereichsüberprüfung fielen diese bereits beim Programmstart auf ... wurden korrigiert und damit war ich auch den RT Error 216 los. Dickes danke dafür ! Die Bereichsprüfung ist ab sofort stanbdardmässig auf "on" |
AW: Grund für Runtime Error 216 finden
Zitat:
|
AW: Grund für Runtime Error 216 finden
RT 216 ist eine Access Violation. Also in der Regel ein Zugriff auf einen ungültigen Speicherbereich. Kann bei dynamischen Arrays durch eine Unachtsamkeit schnell passieren.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz