FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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; ... |
#2
|
||||
|
||||
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 |
#3
|
||||
|
||||
vaya, vaya
Muchas gracias Román, qué velocidad en responder!... y qué ridículo me siento ... 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. |
#4
|
|||
|
|||
Hola Josuk,
Tienes la opción de usar listas de objetos en vez de arrays:
Cordialmente, Gerard. Última edición por gerardus fecha: 17-11-2009 a las 10:57:54. |
#5
|
||||
|
||||
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.
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#6
|
|||
|
|||
Es perfectamente valido.
Cita:
Cordialmente, Gerard |
#7
|
||||
|
||||
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...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
|
#8
|
||||
|
||||
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. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Olvidar liberar punteros, objetos, etc. | walito | Varios | 3 | 06-01-2008 01:51:47 |
Liberar Objetos II | OscarG | OOP | 12 | 11-10-2005 10:13:55 |
liberar objetos | OscarG | OOP | 13 | 06-10-2005 18:49:18 |
Liberar objetos que se han añadido a un TList | neon | OOP | 3 | 07-10-2004 18:47:54 |
Liberar un matriz de objetos | soul6301 | Varios | 8 | 04-08-2004 09:19:53 |
|