Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Array, Record, Problem!


bogus2k - Sa 13.03.04 14:24
Titel: Array, Record, Problem!
Ich habe eine Variable Karte als Array vom Typ Record ;-)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
type DatenArray = record
  caveID: Integer;
  xCoord: 1..150;
  yCoord: 1..200;
  cave_name: String;
  terrain: Integer;
  player_name: String;
  tribe: String;
  rank: Integer;
end// Ende type

var Karte: Array of DatenArray;
    i: Integer;


Und jetzt möchte ich gerne dem Array einen Wert zuweisen:


Delphi-Quelltext
1:
Karte[i].caveID := inttemp;                    


Dabei bekomme ich aber den Fehler EAccessViolation,
was mache ich Falsch?

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt
Moderiert von user profile iconDeCodeGuru: Topic verschoben


Christian S. - Sa 13.03.04 14:27

Hallo!

Du hast die Länge des Arrays noch nicht zugewiesen. Im Moment ist es Null Elemente lang und da kann ja dann nichts reinpassen. Die Länge eines Arrays legst Du mit "SetLength" fest.

Delphi-Quelltext
1:
SetLength(myArray, 10);                    


Aber Vorischt: da die Indizierung eines Arrays bei Null beginnt, ist der höchste zulässige Index 9 und nicht 10. Den höchsten zulässigen Index bestimmst Du mit "High(myArray)".

In den Tutorials gibt es auch eines zu Arrays. Kannste Dir ja mal durchlesen.

MfG
Peter


bogus2k - Sa 13.03.04 14:44

ach so ich dachte die laenge muss man nur bei statistischen arrays angeben
mein array brauch so ca. 10 000 felder, das ist wohl nicht moeglich oder?
wie kann man das sonst realisieren?


Christian S. - Sa 13.03.04 14:58

Wieso sollte das nicht möglich sein?


patrick - Sa 13.03.04 15:02

ich glaub du hast da was verwechselt:
bei statischen arrays wird die länge ja schon in der deklaration festgelegt und ist deshalb später nicht mehr änderbar.
Zitat:
mein array brauch so ca. 10 000 felder, das ist wohl nicht moeglich oder?

doch es ist möglich und zwar so:

Delphi-Quelltext
1:
SetLength(Karte,10000);                    

:D


bogus2k - Sa 13.03.04 15:15

danke funktioniert jetzt alles