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
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Schutzverletzung bei Zugriff auf Objekt

  Alt 5. Jun 2013, 08:55
Kann es denn sein, dass Du in dem Objekt irgendwas mit dem Speicher anstellst (getmem/freemem, dynamische Arrayzuweisungen, Pointerzugriffe etc.) und du damit vielleicht was im Speicher versehentlich überschreibst, das würde erklären warum ein "leeres" Projekt geht und dein anderes nicht?
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
cltom

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

AW: Schutzverletzung bei Zugriff auf Objekt

  Alt 5. Jun 2013, 09:02
mit der Instanz der KlasseB mache ich sonst nichts dergleichen. Auch sonst im Projekt, in anderen Instanzen dieses Objekts habe ich keine Pointer, getmen/freemem, ...).

Was ich probiert habe, den Inhalt der ProzedureX nach Y zu kopieren. Das klappt auch nicht. Selbst wenn die ProzedurY genau den gleichen Inhalt hat, gibts die Schutzverletzung. So, als ob beim Aufruf dieser Prozedur das Objekt verschwindet. Hab auch mal eine neue Prozedur angegelegt (KlasseA.ProzedurZ) und den Inhalt von Y reinkopiert. Geht auch nicht.

Ich könnte mal testweise alle anderen Instanzen von KlasseB weglassen. Aber dann funktioniert das Projekt de facto nicht mehr, da müsste ich praktisch alles auskommentieren, was das Ding macht.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#3

AW: Schutzverletzung bei Zugriff auf Objekt

  Alt 5. Jun 2013, 15:59
Ist eine der Methoden X,Y,Z virtuell?
Das würde darauf hindeuten das die Variable "objekta" nicht auf eine gültige Instanze der Klasse TKlasseA verweist.

Da der Fehler nur in deinem Projekt auftritt, lässt sich die Ursache auch nur im konkreten Code eingrenzen.
Ohne Quellcode, mit dem man den Fehler reproduzieren kann, sind nur allgemeine Hinweise möglich.
Bei dem geposteten abstrakten Code fehlen einfach zu viele Details.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Schutzverletzung bei Zugriff auf Objekt

  Alt 5. Jun 2013, 17:12
Wenn du Zugriffsverletzungen in Methoden hast und den Fehler nicht finden kannst ist folgender Trick empfehlenswert:
Delphi-Quellcode:
procedure TKlasseA.prozedury;
begin
  Assert(Assigned(self)); // Sicherheitsprüfung
  Assert(Assigned(objektb)); // 2. Sicherheitsprüfung
  objektb.value_b := 456; //geht nicht
end;
In den Projektoptionen müssen die Asserts eingeschaltet sein.
Durch Assert(Assigned(self)) wird sichergestellt, dass das Objekt in dem man aktuell arbeitet auch angelegt ist.
Wird die Assertion ausgelöst, bekommt du die Unit und die Zeilennummer an dem das Problem entdeckt wurde.
fork me on Github
  Mit Zitat antworten Zitat
WladiD

Registriert seit: 27. Jan 2006
Ort: Celle
145 Beiträge
 
Delphi 11 Alexandria
 
#5

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

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

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.
Angehängte Grafiken
Dateityp: png errormsg.png (26,5 KB, 25x aufgerufen)

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

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#7

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
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 16:59 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-2025 by Thomas Breitkreuz