Liberar Objetos ¿Cómo resolver esto?
La creación de objetos se realiza sin problemas, en particular se trata de un objeto ”Casa” que contiene un array dinámico de objetos “Habitacion”.
Pero el problema es a la hora de liberarlos, dando error de violación de memoria. ¿Qué estoy haciendo mal? ¿Cómo debería hacerlo? Si alguien lo consigue por favor decidme cómo! Os pongo el código a continuación. Gracias compañeros. ... Type THabitacion = class (TObject) Descripcion: string; end; TCasa = class (TObject) Habitacion: array of THabitacion; end; var Casa: TCasa; implementation procedure TForm1.BotonCrearClick (Sender: TObject); begin Casa:= TCasa.Create; SetLength(Casa.Habitacion,1); Casa.Habitacion[1]:=THabitacion.Create; Casa.Habitacion[1].Descripcion:='Dormitorio'; end; procedure TForm1.BotonLiberarrClick (Sender: TObject); begin Casa.Habitacion[1].Free; Finalize(Casa.Habitacion); Casa.Free; end; ... |
De entrada recuerda que los arreglos dinámicos comienzan en cero, por lo que si asignas memoria para un sólo elemento:
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 |
vaya, vaya
Muchas gracias Román, qué velocidad en responder!... y qué ridículo me siento:o ... efectivamente estaba utilizando un índice fuera de rango... y claro, por defecto Delphi no avisa de estos "detalles"...
El código que tengo entre manos realmente es bastante más complejo y cada objeto de los que he llamado Habitacion tienen a su vez varios arrays de objetos anidados y me volví loco buscando el error en algo menos "obvio" que un índice... bueno, no tengo excusa. Entendido lo de las etiquetas Gracias de nuevo! PD.: Enhorabuena por este foro que ya había visitado en alguna ocasión y en el que por fín participo... espero ser útil en otra ocasión. |
Hola Josuk,
Tienes la opción de usar listas de objetos en vez de arrays:
Cordialmente, Gerard. |
Ya puestos... ¿por qué no heredar de TobjectList?
No es necesario todo el código... pero a mí me gusta así. PD: Yo uso un experto de cnpacks que hice, sólo escribo "Habitacion" un clic de ratón... y se escribe todo eso. |
Cita:
Cita:
Cordialmente, Gerard |
Bueno.tambien si esta usando Delphi 2009 o superior tambien podria usar los generico especificando que tipo de dato introducira en la lista y sin codificar casi nada.;)
Saludos...:) |
Hola compañeros,
Gerardus, buena opción la que propones, ciertamente le da bastante formalidad y elegancia al planteamiento. Y bueno Lepe, nada como optimizar, tanto la idea como el código. Gracias por vuestro tiempo y punto de vista. |
La franja horaria es GMT +2. Ahora son las 05:51:07. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi