Das hört sich nach einem Speicherleck an, vielleicht überschreibst du irgendwo Speicher. Das äußert sich dann oft an ganz anderen Stellen und zufällig. Warum habe ich
hier erklärt.
Schreib am besten in deinen Projektquelltext (Projekt --> Quelltext anzeigen) nach dem begin:
ReportMemoryLeaksOnShutdown := True;
(geht erst am Delphi 2006)
Dann kommen beim Beenden ggf. meistens Meldungen bei Fehlern.
Zudem kannst du einmal die Bereichsüberprüfung einschalten:
Projekt --> Optionen... --> Compiler --> Laufzeitfehler --> Bereichsüberprüfung
oder in neuen Versionen:
Projekt --> Optionen... --> Delphi-Compiler --> Kompilieren --> Laufzeitfehler --> Bereichsüberprüfung
Das deckt in den meisten Fällen auf, wenn du z.B. einen Index größer als der maximale Index in einem dynamischen Arrays benutzt.