Also, mal ein kleines Prog draus gemacht, dass funzt:
Delphi-Quellcode:
Program Project1;
Uses sysutils;
Type
tviech = Record
laenge: Real;
haare: Real;
End;
tblaueviecher = Record
Viecher: Array of tviech;
End;
Var
blaueviecher: tblaueviecher;
i: integer;
Procedure mutiere(Var viech: tviech);
Begin
viech.laenge := viech.laenge + random(5);
viech.haare := viech.haare + random(5);
End;
Begin
Randomize;
For i := 1 To 3 Do
Begin
setlength(blaueviecher.viecher, succ(length(blaueviecher.viecher))); //der array ist 1 größer wie die benötigte anzahl
If length(blaueviecher.viecher) > 1 Then
blaueviecher.viecher[high(blaueviecher.viecher)] := blaueviecher.viecher[high(blaueviecher.viecher)-1]; // hier sieht es so aus wie das letzte
mutiere(blaueviecher.viecher[high(blaueviecher.viecher)]) // hier wird es ein inviduum, da es mutiert
End;
End.
Ergebnisse nach dem Durchlauf:
blaueviecher.viecher[high(blaueviecher.viecher)]: (laenge:5; haare:3)
blaueviecher.viecher: ((laenge:0; haare:2), (laenge:2; haare:3), (laenge:5; haare:3))
Also denke ich, wird es nicht an Pointern liegen...
edit:
Die Posts haben sich Überschnitten, bei mir funzt auch Dein Prog ohne die Initialisierung.
Hast Du mal probiert in den Projektoptionen 'Optimierung' und 'Ausgerichtete Rekord-Felder' auszuschalten?