AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Grund für EAccessViolation in finalization-Abschnitt finden
Thema durchsuchen
Ansicht
Themen-Optionen

Grund für EAccessViolation in finalization-Abschnitt finden

Ein Thema von stachelsau · begonnen am 31. Jul 2009 · letzter Beitrag vom 1. Aug 2009
Antwort Antwort
stachelsau

Registriert seit: 28. Mai 2009
7 Beiträge
 
#1

Grund für EAccessViolation in finalization-Abschnitt finden

  Alt 31. Jul 2009, 12:46
Moin zusammen,

ich bin kurz vorm Verzweifeln wegen folgendem Problem:

Wenn ich mein Programm (gebastelt mit Delphi 7) beende, dann gibts eine EAccessViolation Exception. Auslöser ist wohl eines meiner Formulare, da die Exception nur dann geworfen wird, wenn ein bestimmtes Formular vorher offen war. Dummerweise finde ich aber den Punkt, an dem es tatsächlich knallt nicht, da dies erst in irgendeinem finalization-Abschnitt einer nicht zum Projekt gehörenden Unit passiert. D.h. ich bin danach auch nicht im Debug-Modus, sondern das Programm wird direkt zurückgesetzt und ich kann mir den Aufruf Stack nicht mehr ansehen.

Um das Problem einzukreisen habe ich zunächst MemCheck versucht, aber Überraschung: wenn MemCheck im Projekt ist, tritt der Fehler überhaupt nicht mehr auf!
Ok, MemCheck raus und FastMM rein und ich bekomme folgendes:
Zitat:
FastMM has detected an attempt to use an interface of a freed object. An access violation will now be raised in order to abort the current operation.

The current thread ID is 0x254, and the stack trace (return addresses) leading to this error is:
406C67 [system.pas][System][@IntfClear][17033]
432839 [classes.pas][Classes][TComponent.DestroyComponents][9853]
4B7FFB [Forms.pas][Forms][DoneApplication][1348]
404B32 [system.pas][System][@Halt0][11357]
Mir ist leider nicht so ganz klar, wie mir das beim Finden des Fehlers weiterhelfen kann, da ich in dem betreffenden Formular keine direkten Bezüge zu diesen Units habe. Auch die Tatsache, dass der Fehler mit MemCheck gar nicht erst auftritt, macht die Sache nicht eindeutiger. Hat jemand einen Tipp für mich, mit welchen Schritten ich an die Suche fortsetzen kann?

VG, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#2

Re: Grund für EAccessViolation in finalization-Abschnitt fin

  Alt 31. Jul 2009, 12:54
Du hast wohl irgendwo eine "kaputte" Interfacevariable, also welche nicht auf NIL steht, wo aber kein Objekt mehr dahintersteckt.

Eventuell hast du selber das Objekt vorzeitig freigegeben, die Referenzzählung funktioniert nicht richtig, mit der Variable stimmt was nicht (eventuell auch ein Bufferoverrun) oder sonstwas in der Art.

Halte also mal ausschau nach "fehlerhaften" Schreiboperationen (z.B. via Pointer) oder genutzten Interfaces, da wo du den Fehler vermutest ... also in dem Formular und seinen zugehörenden Codes.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Grund für EAccessViolation in finalization-Abschnitt fin

  Alt 31. Jul 2009, 19:50
davon hatte ich auch ein paar Fehler heute. Konnte die Unit/ Komponente ausmachen, bei der dieser Fehler auftrat und wie himitsu schon sagt, scheint man dort wirklich ein paar Sachen beachten zu müssen. Allerdings um dich zu beruhigen, meistens waren es keine gravierenden Fehler, welche lange Ausbesserungen erforderte.

Weil mir die Erklärung gut geholfen haben von DeddyH, hier mal einer der Beiträge, den ich gepostet habe, wo genau so ein Fehler aufgetreten ist. Schau dir mal #5 an.
2. Account Sero
  Mit Zitat antworten Zitat
stachelsau

Registriert seit: 28. Mai 2009
7 Beiträge
 
#4

Re: Grund für EAccessViolation in finalization-Abschnitt fin

  Alt 1. Aug 2009, 13:26
Problem gelöst. Erklärung hab ich hier gefunden. Interessant ist, dass das problematische Formular überhaupt nichts mit dem Problem zu tun hatte. Das Öffnen des Formulars beeinflusst aber anscheinend die Reihenfolge in der Delphi bei Programmende den ganzen Kram abarbeitet. Das erklärt auch, warum mit MemCheck der Fehler ebenfalls nicht auftrat, da MemCheck ja wohl auch die Reihenfolge in der Units finalisiert ändert. Naja, wieder was gelernt...

VG, Daniel
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:36 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