Free prüft selbst ob die Variable bereits nil ist, dann passiert nichts.
TObject(nil).Free; // läuft problemlos
Das ist falsch. Korrigiert mich bitte, wenn es nach Version Delphi 10.1 anders sein sollte.
In meinem 10.2.3 knallt das mit einer
AV. In Verbindung mit dem eigenwilligen Create innerhalb des try-except-Block könnte es durchaus sein dass die Variable weder nil noch ein gültiges TIniFile ist.
Ich verwende jedenfalls nie Object.Free sondern immer FreeAndNil(Object). Mir sind solche AVs beim Free auch gut bekannt, die treten gerne mal auf wenn es an anderer Stelle vor dem Free einen Speicherüberlauf gegeben hat.
Noch ein Gedanke: Ist PChar hier überhaupt gleich PChar aus der Hostanwendung? Stichwort PAnsiChar und PWideChar...