FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Liberación de memoria
Hola.
Si en un objeto MyStrings de tipo TStrings hago esto ...
... ¿puedo luego liberar esa memoria que ha solicitado StrNew haciendo lo siguiente?:
¿O por el contrario tengo que hacerlo mediante StrDispose? |
#2
|
||||
|
||||
La liberación me parece correcta y luego recuerda borrar el índice 1 (Delete), ya que ahora te ha quedado un String en la posición 1 con un apuntador a ¿???¿?.
Lo que no me ha quedado claro es esto (el CAST como TObject), pero bueno:
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
|||
|
|||
Cita:
Cita:
Lo que no entiendo muy bien es cómo haciendo .Objects[1].Free es capaz de liberar esa memoria, siendo que no se trata de un objeto creado mediante un constructor Create. |
#4
|
||||
|
||||
Cita:
El Free supongo que sabe cómo liberar un TObject o derivado porque almacena la información de la clase, en este caso, no se. No acabo de entender cómo se puede hacer un CAST de un Puntero como TObject. Un TObject, que yo sepa hay que crearlo (como tú bien dices) utilizando su constructor. Otra cosa es que aproveches el puntero del TObject (propiedad Objects) y en lugar de poner ahí un TObject, pongas otra cosa; Correcto. Pero entonces no deberías tratarlo como un TObject (CAST) ni intentar liberarlo como tal.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#5
|
|||
|
|||
Nada, he comprobado que realmente no se puede liberar haciendo .Free
Entiendo que la razón será lo que hemos hablado, que el objeto no ha sido creado mediante su constructor Create y que, por tanto, me atrevo a decir que ni siquiera se trata de un objeto. Al intentarlo salta una excepción de acceso a memoria, así que hay que liberar mediante StrDispose:
Muchas gracias por la ayuda. Un saludo. |
#6
|
||||
|
||||
La lógica me dice que si reservas memoria mediante un método (strNew) debes usar una forma de liberarlo que sea compatible con la forma de reservar, esto es usar StrDispose.
El moldeo de tipos, yo lo veo como una característica muy potente, pero tú eres el responsable de "saber como usarlo". Que no salte una excepción en la liberación, no quiere decir que realmente lo esté liberando correctamente. La ayuda lo deja claro, StrNew llama a StrAlloc: Cita:
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
reserva memoria c++ | halizia | C++ Builder | 1 | 25-04-2006 18:09:52 |
Manejo de memoria | rastafarey | Varios | 3 | 07-04-2005 20:16:18 |
Memoria | Gandazgul | Varios | 2 | 08-05-2004 01:02:37 |
Liberar memoria de un QR. | mlara | Impresión | 1 | 21-02-2004 18:31:16 |
Memoria | susje | Varios | 18 | 23-07-2003 00:07:10 |
|