Un detalle:
El bucle lo haces sobre la variable "Lista" (que supongo es un TStringList) y para recorrerlo usas la variable "g", pero dentro del bucle, accedes a un ListView1 con esa misma variable "g":
Código Delphi
[-]Thumb.dxCheckbox1.Checked:=ListView1.Items.Item[g].Checked;
if ListView1.Items.Item[g].Checked=True
¿estan sincronizados Lista y ListView1? es decir, ¿ambos tienen el mismo número de elementos?
La excepción que da ahora, EOutOfResources si es por falta de recursos y es totalmente distinto a la anterior.
OFFTOPIC: Yo dejé de usar "LIberarMemoria", ya que producía efectos colaterales (errores de memoria varios), al dejar de usar esa rutina, se solucionaron los errores.
Saludos