Sorry, noch mal ganz kurz an die Leute die dir hier helfen wollen (und natürlich auch an dich), ich glaube ein paar ist der ursprüngliche Fehler nicht bewußt.
Wenn ich den Code richtig deute möchte er ein dynamisches Array erstellen aber halt zu Fuß mit Pointern. Der eigentliche Fehler lag definitiv in sizeOf(pt), damit erhöhst du nie im richtigen Masse die Größe des Arrays (also deines reservierten Speichers). Die
Access Violation resultiert also in der Aktion GetMem(pt,
sizeOf(pt) - sizeOf(TPosition)). Das ist einfach mal 4 - 16 Bytes reservieren (-> ungültiger Pointer).