![]() |
array of record -> Zugriffsverletzung beim Lesen
Hallo,
ich habe folgendes Problem: Mein Programm ändert in einem Array von Record's ein paar Werte. Das funktioniert soweit, kann ich mir in der Mainunit mit dem ObjectInspector ansehen. Leider kann ich im Programm nicht auf die Werte zugreifen in meiner eigenen Unit steht u.a.:
Delphi-Quellcode:
und in der mainunit:
type
dot = record x: double; y: double; { .... } end; layer = array [1..(size*size)] of dot; -> die Verarbeitung der layers erfolgt über pointer, die von der mainunit aus zeigen
Delphi-Quellcode:
der genaue Fehler lautet (beim durchlaufen der if-frage im main):
var
{ .... } llayer: layer; implementation procedure TForm1.Button1Click(Sender: TObject); var x,y:Integer; zahl: Int64; begin randomize; myunit:=Tmyunit.create; myunit.initlayer(@llayer); zahl:=0; while zahl<size*size do begin zahl:=zahl+1; if (llayer[zahl].x=5) then {...} [edit] fehler beim kopieren gemacht, sorry . vorher stand hier: if (layer[zahl].x=5) then [/edit] Project Project1.exe raised exception class EAccessViolation with message 'Access Violation at adress 004749D2 in module 'Project1.exe'. Read of adress 00000010'. Process stopped. Use Step or Run to continue. Alle Änderungen, die ich in meiner Unit machen, entsprechen dem, wie es sein soll. Ohne Fehler oder ähnliches. Eben nur, wenn ich in der Unit, in der ich mein Array definiert habe, funktioniert es nicht mehr. Habe jetzt schon versucht, einen Zeiger auf das Auszulesende Objekt zu machen, kommt aber derselbe Fehler. (ich nutze Delphi7 Professional) |
Re: array of record -> Zugriffsverletzung beim Lesen
Da sieht man mal wieder, wozu Konventionen gut sind:
In der letzten Zeile:
Delphi-Quellcode:
greifst du direkt auf deinen Datentyp zu, nicht aber auf die Variable... Ich denke mal, du wolltest llayer[zahl] meinen.
if (layer[zahl].x=5) then {...}
Und die Konvention lautet: Datentype beginnen mit dem Buchstaben T... Ich würde also die Type dot und layer mal umtaufen in TDot und TLayer. |
Re: array of record -> Zugriffsverletzung beim Lesen
du greifst auf ein Object zu welches nicht initialisiert wurde.
|
Re: array of record -> Zugriffsverletzung beim Lesen
:oops: da hab ich das falsche kopiert, sorry...
llayer steht in der Abfrage. Und wie gesagt, ich kann ja die werte via ObjectInspector ansehen... |
Re: array of record -> Zugriffsverletzung beim Lesen
Zitat:
|
Re: array of record -> Zugriffsverletzung beim Lesen
Zitat:
Zitat:
Gruß Gammatester |
Re: array of record -> Zugriffsverletzung beim Lesen
Beides falsch.
Zitat:
Zitat:
btw: SirThornberry ist der Schreibfehler nicht aufgefallen, weswegen er vom Objekt ausging. Das scheint aber laut TE halt nur ein C&P Fehler zu sein, und ist somit dennoch gültig. |
Re: array of record -> Zugriffsverletzung beim Lesen
Also, meine prozedur myunit.initlayer beschreibt den layer mit Startwerten.
wie gesagt, werte sind alle drinnen und lassen sich im Debug anzeigen, jedoch weder rauskopieren oder auslesen noch überprüfen... sorry nochmal wegen des Fehlers beim übertragen meines quellcodes, jellys antwort stimmte schon |
Re: array of record -> Zugriffsverletzung beim Lesen
Kann es sein, dass es etwas mit dieser Zeile zu tun hat?:
Delphi-Quellcode:
Ich weiß nicht, was das bewirkt, aber ich habe alles außer dieser Zeile und der Zeile davor bei mir ausprobiert, und es gibt keinen Fehler.
myunit.initlayer(@llayer);
|
Re: array of record -> Zugriffsverletzung beim Lesen
Zitat:
Aber es war ja ein Tippfehler, d.h. der Compiler würde es wohl nicht übersetzen. Und deshalb sollten wir uns nicht in immer wildere Erklärungsversuche flüchten. Gruß Gammatester |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19: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