Hola...
Caro, para que tu solución funcione como debe ser, es necesario que luego de crear la lista de objetos hagas:
Código Delphi
[-]
StringLists.OwnsObjects := True
De esta forma al hacer
StringLists.Free la lista libera automáticamente los objetos que contiene...
Saludos...