Deine Destruktoren sind falsch gebaut. Hier ein Beispiel:
Delphi-Quellcode:
destructor TFunction.destroy();
var
aPoint : ^TPoint;
i : Integer;
begin
// Zuerst die eingebetteten Objekte freigeben
// Alle wieder freigeben...
for i:=FPoints.Count-1 to 0 do // in umgekehrter Reihenfolge
begin
aPoint := FPoints.Items[i];
Dispose(aPoint);
FPoints.Delete(i);
end;
FPoints.Free; // FreeAndNil wäre hier überflüssig
inherited destroy; // dies muss die letzte Zeile sein !!!
end;