Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Problem mit zweidimensionalen Array


SebastianP - Mi 23.04.08 18:28
Titel: Problem mit zweidimensionalen Array
Hey =)
habt ihr eine AHnung warum das hier eine Exception verursacht?



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
type TFeldStatus = (empty,engaged,tic,tac);

...

TSpieldaten = class
  strict private
  dasSpielfeld: Array[0..2of Array [0..2of TFeldStatus;
 // hab es auch schon mit einem statischen Array probiert!
  public
    procedure setzeWert(x,y: integer; aktueller_Spieler: TFeldStatus);
    procedure initialisieren();
    function pruefeFeld(x,y: integer): TFeldStatus;
  end;

...

procedure TSpieldaten.initialisieren();
var i,r: integer;
begin
  for i:=0 to 2 do
      for r:=0 to 2 do
          dasSpielfeld[i][r] := empty;
end;


Ich hoffe ihr könnt mir weiterhelfen,
mach schon 3 Tage am dem Programm rum ;-)
Kann auch gern den ganzen Quellcode kopieren,
falls euch das weiterhilft!

LG Basti!

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


Tilo - Mi 23.04.08 18:53

Hallo,
Willkommen im DF.

Wo genau tritt die Exception auf? (Welche Codezeile?)


kleiner Hinweis:
Nutze doch Delphi-Tags
schon erledigt


Christian S. - Mi 23.04.08 18:53

Ich tippe mal drauf, dass Du die Instanz von TSpieldaten nicht korrekt erstellt hast ;-)
Ansonsten gilt das, was Tilo sagte: Welche Exception kommt?

//edit: Ach ja, :welcome:


SebastianP - Mi 23.04.08 19:07

Hi, danke für die freundliche Aufnahme =)

sobld ich auf das Array zugreifen will, also hier:


Delphi-Quelltext
1:
dasSpielfeld[i][r] := empty;                    


Die folgende Exception tritt auf:


Erste Zufalls-Exception bei $7C81EB33. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 00462F2B in Modul 'tictactoe_game.exe'. Schreiben von Adresse 00000004'. Prozess tictactoe_game.exe (1348)

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


Christian S. - Mi 23.04.08 19:09

Was ist mit meinem Hinweis? Wie hast Du das Objekt der Klasse TSpieldaten erstellt? :-)


SebastianP - Mi 23.04.08 19:19

Hab eben den Standardkonstruktor verwendet:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
constructor TSteuerung.createSteuerung(p_GUI: TForm1);
begin
  inherited Create;
  dieGUI := p_GUI;
  aktueller_Spieler := tic;
  TSpieldaten.Create;
  dieSpieldaten.initialisieren();
end;


Das stimmt nicht, richtig ;-) ?


Marc. - Mi 23.04.08 19:24

Hi und auch ein :welcome: von mir! ;)
Du musst Deiner Instanz natürlich auch das Objekt zuweißen, sonst besteht ja hinterher keinerlei Verbindung.


Delphi-Quelltext
1:
 Spieledaten := TSpieldaten.Create;                    


Weitere Infos zum Konstruktor findest Du beim Delphi-Treff [http://www.delphi-treff.de/backstage/interna/konstruktor/] oder im Tutorial [http://www.christian-stelzmann.de/artikel/crashkurs.htm#konstruktor] von user profile iconChristian S..

Cheers,
Marc


SebastianP - Mi 23.04.08 20:56

Göttlich,so blöd muss man zuerst mal sein^^

Also das Problem lag tatsächlich wie ihr gleich vermutet hattet
bei dem Konstruktor von TSpieldaten.
Die Lösung hat war dann genau so wie es Marc. gesagt hat!

Vielen, vielen Dank!
Ich hätt mich echt früher anmelden sollen :-)