![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
![]() 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
![]() 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. |
![]() |
|
|
![]() |
||||
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 |
![]() |
|