Einzelnen Beitrag anzeigen

Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#30

Re: denkfehler; array-> dynarray

  Alt 8. Jan 2009, 13:35
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?
  Mit Zitat antworten Zitat