In TApplication.CreateForm wird irgendwann Instance.Create(Self) aufgerufen. Damit ist die TApplication Instanz Owner des Forms. Die Freigabe erfolgt dann wie bei jedem anderen Owner auch über DestroyComponents. Das wird aber wiederum in DoneApplication aufgerufen.
Man darf natürlich keinen Breakpoint in DestroyComponents setzen, da das ja noch von anderen Stellen aufgerufen wird. Du kannst nur mit F8 durchsteppen und sehen, wo es knallt.
Es gibt noch zwei Alternativen:
- Setze einen Breakpoint in TCustomForm.Destroy
- Iteriere nach dem Application.Run rückwärts über Screen.Forms und gib die Forms manuell frei
Der zweite Ansatz bringt allerdings eine andere Ablaufreihenfolge, die den Fehler womöglich kaschiert.