Hola oscjae.
En líneas generales la idea es correcta, pero para obtener los límites del arreglo dinámico usa las funciones
Low y
High:
Código Delphi
[-]
procedure LiberarLista;
var
i: Integer;
begin
for i:= Low( vLista ) to High( vLista ) do
if Assigned( vLista[i].vFrame ) then
FreeAndNil( vLista[i].vFrame );
SetLength( vLista, 0 );
end;
Saludos