Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Dynamische,globale arrays...warum jehtn das nich???


JCD - So 09.02.03 22:17
Titel: Dynamische,globale arrays...warum jehtn das nich???
Hi q all,


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
var
   Form1: TForm1;
   Neuron: array of TNeuron;
   le: array of Integer;
   Canvas: TCanvas;
   e: integer;

procedure TForm1.Button3Click(Sender: TObject);
begin
 
 le[1]:=3;
 le[2]:=3;
 le[3]:=1;

 for e := 1 to 7 do
   begin
     Neuron[e] := TNeuron.Create;
   end;

end;


So,ganz simpel,aber es funzt nicht-Fehlermeldung: Exception der Klasse EAccessViolation

Das verstehe wer will...
Thx schon,
Icke


Christian S. - So 09.02.03 22:30

Du verwendest hier ein dynamisches Array. Dort musst Du erst einmal "PLatz schaffen" für die Einträge, die Du dort unterbringen willst. Initial besitzt ein dynamisches Array keinerlei Einträge. Mit SetLength(array, anzahl) kannst Du festlegen, wieviele Einträge es besitzen soll. Das kannst Du zur Laufzeit beliebig oft ändern. Mit Length(array) bekommst Du die Anzahl der Einträge mit High(array) den höchsten zulässigen Index.

MfG,
Peter


JCD - So 09.02.03 22:36

aha hmm is mir echt neu irgendwann früher ging das mal...
find ich übrigens ziemlich schwachsinnig das das nich geht da es ja nich von anfang an und wirklich dynamisch ist...aber egal
Aber Danke

-----------
Rock n Roll,
Icke


Christian S. - So 09.02.03 22:58

Zitat:
find ich übrigens ziemlich schwachsinnig das das nich geht da es ja nich von anfang an und wirklich dynamisch ist...aber egal
Ich bin mir nicht ganz sicher, was Du meinst. Dynamische Arrays heißen ja gerade dynamische Arrays, weil Du erst zur Laufzeit festlegst, welche Größe sie haben sollen. So oft Du willst.
Aber Du must halt schon noch sagen, wieviele Elemente es haben soll. Beispiel:

Quelltext
1:
VAR my_array : ARRAY OF Integer;                    

Am Anfang hat dieses Array die Länge 0. Es passen folglich auch keine Elemente hinein. Der Befehl

Quelltext
1:
SetLength(my_array,1);                    

vergrößert das Array nun, sodass ein Element hineinpasst. Wenn Du ein dynamisches Array mit einer Schleife füllen möchtest, machst Du das so:

Quelltext
1:
2:
3:
4:
5:
for e := 1 to 7 do 
begin 
  SetLength(Neuron,Length(neuron)+1);
  Neuron[High(Neuron)] := TNeuron.Create;
end;

Mit High(array) erhälst Du immer den höchst zulässigen Index.

MfG,
Peter