De entrada recuerda que los arreglos dinámicos comienzan en cero, por lo que si asignas memoria para un sólo elemento:
Código Delphi
[-]
SetLength(Casa.Habitacion,1);
entonces no es válido usar Casa.Habitacion[1]. Tendría que ser Casa.Habitacion[0].
Otra cosa: Por favor usa las etiquetas [delphi] para publicar código:
[delphi]
Aquí tu código
[/delphi]
// Saludos