AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schutzverletzung bei Zugriff auf Objekt

Ein Thema von cltom · begonnen am 4. Jun 2013 · letzter Beitrag vom 12. Jun 2013
Antwort Antwort
Seite 2 von 2     12   
WladiD

Registriert seit: 27. Jan 2006
Ort: Celle
135 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Schutzverletzung bei Zugriff auf Objekt

  Alt 6. Jun 2013, 08:27
So einen ähnlichen "Fehler" hatte ich vor kurzem auch gehabt. Es gab keinen logischen Zusammenhang zwischen den Zugriffsverletzungen und dem dazu führendem Call-Stack. Die Ursache war im Grunde so alt wie C (und alle anderen Sprachen, die Pointer unterstützen), eine Bereichsüberschreitung beim variablen Array/manuell angefordertem Buffer.

Auf die Schliche kannst dem Fehler kommen, wenn du in den Compiler-Optionen die Option Bereichüberprüfung (am besten für das Debug-Build) aktivierst. Wenn du dann zur Laufzeit ERangeError-Exceptions bekommst, so ist meine Vermutung bestätigt. Aber Vorsicht, diese Compiler-Option vergrößert und verlangsamt die Anwendung, aber für's Debugging manchmal unerlässlich.

MfG
Waldemar Derr
Profil bei GitHub
  Mit Zitat antworten Zitat
cltom
Online

Registriert seit: 22. Sep 2005
221 Beiträge
 
Delphi 12 Athens
 
#12

AW: Schutzverletzung bei Zugriff auf Objekt

  Alt 6. Jun 2013, 12:44
Hallo,

danke nochmals für den Input. Habe sowohl den Assert/Assigned-Trick versucht als auch die Bereichsüberprüfung. Es läuft aber letztlich offenbar immer darauf hinaus, dass dieses ObjektB im Objekt A nicht existiert. Freigegeben wird es aber auch nicht.

Die Fehlermeldung anbei bringt wohl auch nicht mehr Licht in die Sache.
Miniaturansicht angehängter Grafiken
errormsg.png  

Geändert von cltom ( 6. Jun 2013 um 13:52 Uhr)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: Schutzverletzung bei Zugriff auf Objekt

  Alt 6. Jun 2013, 16:47
Aus der Fehlermeldung lässt sich folgendes schließen:

Du befindest dich in der Methode einer Klasse.
Diese Instanze der Klasse wurde nicht erzeugt und die Instanzevariable ist "nil".
Die Methode ist nicht virtuell, sonst wärst du nicht so weit gekommen.

Zitat:
Habe sowohl den Assert/Assigned-Trick versucht als auch die Bereichsüberprüfung. Es läuft aber letztlich offenbar immer darauf hinaus, dass dieses ObjektB im Objekt A nicht existiert.
Existiert "objekta", hast du das tatsächlich überprüft?

Zitat:
Freigegeben wird es aber auch nicht.
Wird es erzeugt, hast du das tatsächlich überprüft?
Wird das Property "objektb" eventuell mehrmals in unterschiedlichen Ebenen der Klassenhierarchie deklariert?
Handelt es sich um eine einfache Variable oder wird das Objekt von einer Methode geliefert?

Hast du die von mir vorgeschlagene Protokollierung der Erzeugung, Zuweisung, Freigabe der Klassen (objecta, objectb) mit Instanznummer implementiert?
Zeig uns bitte das Protokoll.
  Mit Zitat antworten Zitat
cltom
Online

Registriert seit: 22. Sep 2005
221 Beiträge
 
Delphi 12 Athens
 
#14

AW: Schutzverletzung bei Zugriff auf Objekt

  Alt 6. Jun 2013, 21:33
Also, die Tipps hab ich natürlich befolgt und probiert (einzige Einschränkung: soweit ich sie auch verstanden habe - welches Protokoll etwa meinst Du? oder Instanznummer?).

Objekt A existiert, ich kann einen Breakpoint vor dem Aufruf der ProzedurY setzen und kann da alle Werte im ObjektA aber auch im Unterobjekt B einsehen. Objekt A und Objekt B existieren eine Codezeile vorher noch. Sobald ich eine Zeile später in die ProzedurY springe, scheint das Objekt B verloren zu sein.

Was allerdings auch merkwürdig ist: dem Objekt A hab ich testweise noch ein paar Variablen hinzugefügt. Wenn ich nun in ProzedurY diese Variablen ansehe, so haben die zum Teil einen Inhalt, obwohl diesen Variablen nirgends ein Wert zugewiesen wurde. Noch merkwürdiger: der Inhalt macht Sinn, also die Werte, die da drinstehen, die kommen an anderer Stelle im Programm vor. Das sind die Inhalte anderer Variablen einer weiteren Instanz von ObjektB.

Danke jedenfalls für die Mühe, da immer noch mitzulesen und zu helfen!
  Mit Zitat antworten Zitat
cltom
Online

Registriert seit: 22. Sep 2005
221 Beiträge
 
Delphi 12 Athens
 
#15

AW: Schutzverletzung bei Zugriff auf Objekt

  Alt 12. Jun 2013, 10:43
Kleines Update:

An den Objekten A und B selbst liegt es offenbar nicht, sondern es gibt eine Querabhängigkeit zu einem ObjektC (das auch eine Instanz vom ObjektB enthält). Genauer gesagt scheint es am SetLength von ein paar dynamischen Arrays im ObjektC zu liegen. Sobald ich die rausnehme, klappt es (natürlich fehlt dann ein großer Teil vom ObjektC).

Wirklich schlau bin ich damit auch noch nicht.

Das sollte jetzt vermutlich in einen neuen Thread, aber ich lasse es mal hier, da es Teil des Codes von ObjC ist: wenn ich ein dynamisches Array mehrmals in seiner Größe ändern muss, was ist dann der korrekte Weg:

SetLength(analysis,0);
SetLength(analysis,anzahl);

oder nur

SetLength(analysis,anzahl);

Beeinflusst das den Speicherverbrauch bzw. die Entscheidung, was Delphi mit den alten Daten macht?
  Mit Zitat antworten Zitat
cltom
Online

Registriert seit: 22. Sep 2005
221 Beiträge
 
Delphi 12 Athens
 
#16

AW: Schutzverletzung bei Zugriff auf Objekt

  Alt 12. Jun 2013, 12:20
ps. wenn ich die Arrays konstant definiere [0..100] dann gibt es nirgendwo Fehlermeldungen ...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 20:51 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