Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Access Violation bei einer Zuweisung (https://www.delphipraxis.net/51777-access-violation-bei-einer-zuweisung.html)

MARGERSCH 18. Aug 2005 16:02


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

jfheins 18. Aug 2005 16:04

Re: Access Violation bei einer Zuweisung
 
Wurde die Unterklasse erstellt ?

MARGERSCH 18. Aug 2005 16:15

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;

BlackJack 18. Aug 2005 16:16

Re: Access Violation bei einer Zuweisung
 
hast dudenn auch im contructor der "Hauptklasse" (oder sonstwo)
Delphi-Quellcode:
Instanz := TUnterKlasse.Create;
stehen?

MARGERSCH 18. Aug 2005 16:24

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

BlackJack 18. Aug 2005 16:34

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:
with Instanz do
  dWert1 := dWert2;
, 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.

DP-Maintenance 18. Aug 2005 16:54

DP-Maintenance
 
Dieses Thema wurde von "sakura" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.

MARGERSCH 20. Aug 2005 10:04

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:
 Device := TDevice.Create
Der Fehler kommt auch, wenn ich die Unterklasse
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.

MARGERSCH 20. Aug 2005 10:29

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:
Procedure xyz;
 var dWert2 : double;
begin
  with clKlasse do
  begin
    dWert2 := 0.26267
    dWert1 := dWert2         
  end;
  ...
end;
läuft hingegen einwandfrei

BlackJack 20. Aug 2005 10:32

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr.
Seite 1 von 2  1 2      

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