Ist im Prinzip ganz einfach...
Das ist es nämlich was ich meinte mit "Schreib den Code doch noch einmal auf!" Dann wär' dir folgender Fehler aufgefallen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| for i:= 0 to 3 do begin Inc(VertexLength); SetLength(Vertex,VertexLength); Vertex[VertexLength-1]:=Vector3d.Create; Vertex[VertexLength-1].Vector2d:=Vector.Create; Vertex[VertexLength-1].x:=1811; |
Was ich mein ist:
Du erzeugst hier immer nur den letzten Vertex und nie die ersten 3!
Vertex[i] wär hier richtig.
Das war meiner Ansicht nach der Grund für die Access Violation.
Desweiteren liegt hier noch ein Fehler:
Nämlich bei: Setlength(Vertex,VertexLength);
Motzi hat hierfür ja schon den richtigen Code gepostet.
Nicht nur, dass dieser besser, einfacher usw. ist - du musst ihn auch so verwenden!
Bei deiner Variante wird bei jedem Aufruf von Setlength dem Array von Delphi ein neuer Speicherbereich zugewiesen (denk ich jedenfalls) - d.h. deine Pointer, die du vorher gesetzt hast zeigen gar net mehr auf den richtigen Speicherbereich, weil sich der Array gar net mehr dort befindet. Deshalb diese völlig verwirrenden Ergebnisse.
Ich hoff das hat deine Frage beantwortet...alles klar ?
Moderiert von
Peter Lustig: Code- durch Delphi-Tags ersetzt