AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi array of record -> Zugriffsverletzung beim Lesen
Thema durchsuchen
Ansicht
Themen-Optionen

array of record -> Zugriffsverletzung beim Lesen

Ein Thema von Andy386 · begonnen am 31. Mär 2008 · letzter Beitrag vom 2. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
Andy386

Registriert seit: 26. Mär 2008
55 Beiträge
 
#1

array of record -> Zugriffsverletzung beim Lesen

  Alt 31. Mär 2008, 15:17
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:
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
und in der mainunit:
Delphi-Quellcode:
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]
der genaue Fehler lautet (beim durchlaufen der if-frage im main):
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)
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: array of record -> Zugriffsverletzung beim Lesen

  Alt 31. Mär 2008, 15:22
Da sieht man mal wieder, wozu Konventionen gut sind:
In der letzten Zeile:
if (layer[zahl].x=5) then {...} greifst du direkt auf deinen Datentyp zu, nicht aber auf die Variable... Ich denke mal, du wolltest llayer[zahl] meinen.

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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: array of record -> Zugriffsverletzung beim Lesen

  Alt 31. Mär 2008, 15:24
du greifst auf ein Object zu welches nicht initialisiert wurde.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Andy386

Registriert seit: 26. Mär 2008
55 Beiträge
 
#4

Re: array of record -> Zugriffsverletzung beim Lesen

  Alt 31. Mär 2008, 15:35
da hab ich das falsche kopiert, sorry...
llayer steht in der Abfrage.
Und wie gesagt, ich kann ja die werte via ObjectInspector ansehen...
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: array of record -> Zugriffsverletzung beim Lesen

  Alt 31. Mär 2008, 15:36
Zitat von SirThornberry:
du greifst auf ein Object zu welches nicht initialisiert wurde.
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#6

Re: array of record -> Zugriffsverletzung beim Lesen

  Alt 31. Mär 2008, 15:37
Zitat von SirThornberry:
du greifst auf ein Object zu welches nicht initialisiert wurde.
Also das ist doch nun wirklich kein Object, und wenn's eine globale Variable ist, ist sie automatisch initialisiert.


Zitat von Jelly:
In der letzten Zeile ... greifst du direkt auf deinen Datentyp zu, nicht aber auf die Variable...
Das erscheint noch wilder, wie greift man auf einen Datentyp zu? Interessant ist, daß dieser Unsinn vom Compiler übersetzt wird.

Gruß Gammatester
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: array of record -> Zugriffsverletzung beim Lesen

  Alt 31. Mär 2008, 15:43
Beides falsch.

Zitat von gammatester:
Also das ist doch nun wirklich kein Object, und wenn's eine globale Variable ist, ist sie automatisch initialisiert.
Es ist ein Objekt, und wird aus diesem Grunde niemals automatisch initialisiert.

Zitat von gammatester:
Das erscheint noch wilder, wie greift man auf einen Datentyp zu? Interessant ist, daß dieser Unsinn vom Compiler übersetzt wird.
Da ist nix wildes dran. Er greift nicht auf sein Objekt, sondern direkt auf die Klasse zu. Würde das nicht kompilieren, könnten kein Konstruktor, und keine class-Methoden aufgerufen werden, und das gesamte OOP-Konzept wäre unmöglich.

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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Andy386

Registriert seit: 26. Mär 2008
55 Beiträge
 
#8

Re: array of record -> Zugriffsverletzung beim Lesen

  Alt 31. Mär 2008, 15:49
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
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: array of record -> Zugriffsverletzung beim Lesen

  Alt 31. Mär 2008, 15:49
Kann es sein, dass es etwas mit dieser Zeile zu tun hat?:myunit.initlayer(@llayer); 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.
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#10

Re: array of record -> Zugriffsverletzung beim Lesen

  Alt 31. Mär 2008, 15:51
Zitat von Medium:
Beides falsch.

Zitat von gammatester:
Also das ist doch nun wirklich kein Object, und wenn's eine globale Variable ist, ist sie automatisch initialisiert.
Es ist ein Objekt, und wird aus diesem Grunde niemals automatisch initialisiert.

Zitat von gammatester:
Das erscheint noch wilder, wie greift man auf einen Datentyp zu? Interessant ist, daß dieser Unsinn vom Compiler übersetzt wird.
Da ist nix wildes dran. Er greift nicht auf sein Objekt, sondern direkt auf die Klasse zu. Würde das nicht kompilieren, könnten kein Konstruktor, und keine class-Methoden aufgerufen werden, und das gesamte OOP-Konzept wäre unmöglich.
Es wird immer wilder, jetzt ist ein array of record schon eine Klasse, vorher war's nur ein Objekt!

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:24 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