Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Delphi Exception Problem


carlyle - Di 08.05.12 14:52
Titel: Delphi Exception Problem
Hallo Leute,
Ich hab ein kleines Problem, undzwar habe ich eine Klasse erstellt und davon eine Instanz als Array erstellt:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
type
  CSpieler = Class
  public
    ID, Kapital, Position : Integer;
    Name : String;
    Lebendig : Boolean;
  end;

var
  Spieler : array of CSpieler;


Im späteren Verlauf des Programmes wird die Anzahl der Spieler festgelegt und folgisch der Array über eine andere Unit um diese Anzahl erweitert:


Delphi-Quelltext
1:
2:
  AnzahlSpieler := StrToInt(ComboBox1.Text);
  SetLength(Spieler,AnzahlSpieler);


In einer weiteren Unit benutze ich den create Befehl und Initialiere ein paar Member der Klasse:


Delphi-Quelltext
1:
2:
3:
  Spieler[Zug]:=CSpieler.create;
  Spieler[Zug].ID := Zug;
  Spieler[Zug].Name := EName.Text;


Das ist kein Problem.
Aber nun will ich diese Werte in wieder einer neuen Unit abrufen, aber wenn ich das tue bekomme ich beim start des Programmes einen Exception Fehler:


Delphi-Quelltext
1:
2:
3:
4:
procedure TFFeld.FormCreate(Sender: TObject);
begin
  Panel1.Caption:=Spieler[Zug].Name;
end;


Ich weiß nicht genau wo der Fehler ist.


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Di 08.05.2012 um 15:33


jaenicke - Di 08.05.12 15:11

Hallo und :welcome: im Forum!

Bitte benutze doch die Delphi- statt Highlight-Tags, das ist geringfügig ;-) leichter lesbar:

Quelltext
1:
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAGc1c1eac8c870ca44647fff593d9bb0b2}</span></span>                    


Zum Problem:
Dein FormCreate wird vermutlich vor der Zeile ausgeführt, in der du CSpieler.create aufrufst. Deshalb ist die Instanz Spieler[Zug] noch gar nicht da. Ist Zug da eigentlich schon initialisiert?
Schalte am besten auch einmal die Bereichsprüfung in den Projektoptionen an. ;-) Und dann kannst du einmal einen Haltepunkt auf die beiden genannten Codezeilen setzen und schauen wo das Programm zuerst ankommt. Im Debugger kannst du die Werte auch prüfen.


carlyle - Di 08.05.12 15:26

Tatsache, die CSpieler.Create routine wird erst nach einem Buttonklick aufgerufen, in der dpr Datei wird aber beim Start von jeder form die FormCreate Routine aufgerufen.

Vielen Dank!