Quizás tengas problemas con la variable xreporte, porque de otra forma no entiendo donde está el fallo.
Suponiendo que ya tienes creado el Tstringlist y almacenado los informes (que me gusta más que reporte

)
Código Delphi
[-]
procedure VerInforme( NombreInforme: string);
var i:integer;
Informe:TquickReport;
begin
i := Reportes.Indexof(nombreInforme);
if I <> -1 then
begin
xreporte := TQuickReport(Reportes.Objects[i]);
xreporte.Preview;
end
else
ShowMessage('El informe no existe');
En este caso no tenemos que liberar nada, ya que xreporte es un puntero que apunta al Reportes.Objects[i], si liberamos xreporte, estaríamos liberando tambien el Objects[i], así que en siguientes llamadas a ese mismo informe daría error.
saludos y espero te sirva.