Concentriamoci su questo punto:

codice:
	lista:=TlistaFormati.create('formati.ini');
	formato1:=TFormato.create;
	formato1:=lista.getFormatoByName('PICCOLO');
	showmessage(formato1.getnome);
	formato1.free;
	formato2:=TFormato.create;
	formato2:=lista.getFormatoByName('PICCOLO');
	showmessage(formato2.getnome);
	formato2.free;
Innanzitutto, ci sono delle chiamate a TFormato.Create che non servono a nulla, perché la variabile viene riassegnata subito dopo usando la getFormatoByName.

Poi, chiamando la getFormatoByName, si ottiene il riferimento a un oggetto che viene memorizzato in "formato1", di cui si fa la Free; pertanto, quell'oggetto viene distrutto, e il riferimento contenuto in "formato1" non sarà più valido.

Successivamente, sempre tramite la getFormatoByName, si ottiene lo stesso formato (PICCOLO) che non esisterà più perché distrutto poco prima.