![]() |
Access Violation bei einer Zuweisung
Hallo,
Ich bekomme in einer Prozedur einer selbst geschriebenen Klasse bei der Zuweisung dWert1 := dWert2; eine Access Violation Im Projekt LDUAcquisition.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 005FAD4C in Modul 'LDUAcquisition.exe'. Schreiben von Adresse 00000030'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen. Dabei ist dWert1 eine public Double-Variable in einer Unterklasse Dabei ist dWert2 eine lokale Double-Variable mit einem normalen Wert (2.6267) Hat jemand eine Idee, was falsch sein könnte ? Ich bin für jeden Tipp dankbar Martin |
Re: Access Violation bei einer Zuweisung
Wurde die Unterklasse erstellt ?
|
Re: Access Violation bei einer Zuweisung
Sie ist in der Hauptklasse, wo auch die (fehlerhafte) Prozedur steht,
im public-Teil mit einer Instanz deklariert. In der Prozedur selbst steht natürlich dann auch
Delphi-Quellcode:
with Instanz do
dWert1 := dWert2; |
Re: Access Violation bei einer Zuweisung
hast dudenn auch im contructor der "Hauptklasse" (oder sonstwo)
Delphi-Quellcode:
stehen?
Instanz := TUnterKlasse.Create;
|
Re: Access Violation bei einer Zuweisung
Tschuldigung, ich bin ein wenig durcheinander gekommen
(tut mir leid), die Variable dWert1 ist doch direkt in der Hauptklasse definiert |
Re: Access Violation bei einer Zuweisung
wenn die Variable ein Double und in einer Klasse deklariert ist, dann kann der Fehler eigentlich nur kommen, wenn keine Instanz erstellt wurde, d.h. wenn Create nicht aufgerufen worden ist. Check doch noch mal nach ob du das nicht vergessen hast.
und wenn du soetwas schreibst:
Delphi-Quellcode:
, dann werden sowohl dWert1 als auch dWert2 zuerst in "Instanz" gesucht, d.h. wenn Instanz eine Variable namens dWert1 hat, dann wird diese angesprochen, und nicht etwa die Variable dWert1 der Hauptklasse - ich weiss ja nicht wie es jetzt genau sein soll. von daher vielleicht mal das "with" weglassen und die Variablen direkt über die Instanzen ansprechen.
with Instanz do
dWert1 := dWert2; |
DP-Maintenance
Dieses Thema wurde von "sakura" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.
|
Re: Access Violation bei einer Zuweisung
Danke, BlackJack, für die Hinweise,
ich habe deshalb noch mal den Code überprüft. Die Instanz der Hauptklasse wurde erstellt.
Delphi-Quellcode:
Der Fehler kommt auch, wenn ich die Unterklasse
Device := TDevice.Create
Instanz vor die einzelnen Variablen und Objekte setze und die with-Anweisung weglasse. Allerdings ist mir beim Testen etwas anderes aufgefallen Wenn ich im obigen Source Fkt(x,y,z) ersetze durch den konstanten Wert 2.6267, dann gibt es kein Problem. Also dürfte der Fehler wohl in der Funktion Fkt liegen. Das Komische ist nur, dass bei der Berechnung des Wertes durch die Funktion Fkt kein Fehler auftaucht und in dWert2 wirklich der richtige berechnete Wert zu finden ist. Vielleicht noch zur Info: Fkt ist eine Funktion aus einer Sammlung von selbstgeschriebenen mathematischen Funktion in einer eigenen Unit. |
Re: Access Violation bei einer Zuweisung
Der Fehler kommt selbst dann, wenn ich erst die Funktion aufrufe
und danach den Wert dWert1 mit einem konstanten wert überschreibe Also :
Delphi-Quellcode:
Procedure xyz;
var dWert2 : double; begin with clKlasse do begin dWert2 := Fkt(x,y,z); dWert2 := 0.26267 dWert1 := dWert2 // hier kommt die Access Violation end; ... end;
Delphi-Quellcode:
läuft hingegen einwandfrei
Procedure xyz;
var dWert2 : double; begin with clKlasse do begin dWert2 := 0.26267 dWert1 := dWert2 end; ... end; |
Re: Access Violation bei einer Zuweisung
und dWert1 ist ein feld von clKlasse? dann wird entweder clKlasse nicht Created oder die Fkt-function ist fehlerhaft. (ich denke eher ersteres)
ansonsten ist es ziemlich merkwürdig, dass der 2. code funzt, der 1. aber nicht... ich kann mir das höchstens so erklären dass der Debugger an der falschen Stelle die AV anzeigt. |
Re: Access Violation bei einer Zuweisung
Der Fehler muss wohl in der Funktion Fkt(x,y,z) zu suchen sein, denn das ist der einzige nennenswerte unterschied, zwischen den beiden dargestellten Varianten (zumindest vom dargestellten Bereich).
Vielleicht könntest Du auch den kompletten Source dieser Klasse posten? Dann müßte man auch weniger raten. Zum einen fehlt dir in einem der Codes auch ein ";", denke aber, das ist bei der Übernahme von deinem Quellcode ins Forum passiert. |
Re: Access Violation bei einer Zuweisung
Du hast Recht, Günter.
Wenn ich die Funktion Fkt so verkürze, dass nur die konstante Wert als Rückgabewert übergeben wird, läuft auch alles einwandfrei. Vermutlich habe ich irgendwelche Variablen nicht richtig initialisiert, aber da der Fehler erst bei der Zuweisung auftrat, bin ich gar nicht auf die Idee gekommen, dass die Funktion fehlerhaft sein könnte. Ich glaube, dass ich jetzt allein weiter komme Vielen Dank Martin |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:46 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