Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Manejo de Multi-Listas (listas de listas) (https://www.clubdelphi.com/foros/showthread.php?t=33289)

DelphiRat 03-07-2006 11:47:25

Manejo de Multi-Listas (listas de listas)
 
Hola a todos.

Estoy haciendo mi trabajo de mi curso Estructuras de Datos y tengo un problema bien grande. Estoy trabajando con listas de enlace doble, en la data de cada nodo de la lista almaceno una lista de enlace simple. Para almacenar esta lista simple creo el objeto ListaSimple y lo almaceno como un campo de un registro que se grabará como data del objeto ListaDoble. Luego, destruyo el objeto ListaSimple y repito el mismo procedimiento para cada nodo de la lista de enlace doble. Todo graba bien.

Mi problema está en acceder después a la data de mi lista de enlace simple en los nodos de la lista de enlace doble. Yo creo un objeto auxiliar para copiar el objeto ListaSimple del registro de un nodo del objeto ListaDoble y poder editarlo (para luego volver a grabarlo), pero esto me genera un AccessViolation al tratar de acceder al objeto auxiliar. ¿quizá este creando mal mi objeto auxiliar?

Este es mi primer post y de verdad necesito ayuda en este tema :confused:, es urgente! Gracias.

dec 03-07-2006 12:05:20

Hola,

¿No puedes ilustrar lo que dices con el código fuente que estás escribiendo? Pienso que puede ayudar a que te ayuden.

DelphiRat 03-07-2006 12:55:28

Mi objeto ListaSimple (equivale a oMensajes) es del tipo de estructura de una 'Cola', la función push equivale a insertar_al_final. Mi objeto ListaDoble (equivale a oTemas) es una lista de doble enlace común. Mi varibale nuevoMensaje es del tipo puntero a registro (para guardarse en ListaSimple). Mi variable nuevoTema es del tipo puntero a registro (para guardarse en ListaDoble).

Código Delphi [-]
//Creo objeto ListaSimple...
oMensajes:=cCola.create;
//Inserto campos en el registro que se guardará en ListaSimple...
new(nuevoMensaje);
nuevoMensaje^.mensaje:=MeMensaje.Text;
nuevoMensaje^.autor:=FrmInicio.EdUser.Text;
nuevoMensaje^.fecha:=DateTimeToStr(Today);
//Inserto el registro en ListaSimple....
oMensajes.push(nuevoMensaje);
//Inserto ListaSimple como campo de un registro a ListaDoble...
nuevoTema^.mensajes:=oMensajes;
//Destruyo mi objeto ListaSimple...
oMensajes.destroy;
//Inserto registro (que incluye mi objeto ListaSimple) a ListaDoble...
oTemas.insertar_al_final(nuevoTema);

Mi declaración de mi registro Tema es:

Código Delphi [-]
rTema = record
  ..
  ..
  ..
  mensajes: cCola;
  end;

No hay problema con esa declaración, ¿verdad?

Bueno, ahí está lo importante de mi código. Lo que busco es la sintaxis para leer lo guardado (como se explica en el primer mensaje).

seoane 03-07-2006 12:55:38

A simple vista creo que el problema esta aqui:

Código Delphi [-]
nuevoTema^.mensajes:=oMensajes;
//Destruyo mi objeto ListaSimple...
oMensajes.destroy;

Despues de destruir el objeto oMensajes, nuevoTema^.mensajes hace referencia aun objeto que ya no existe por lo que cualquier intento de acceder a el provocara un error.

DelphiRat 03-07-2006 19:42:58

Gracias. Efectivamente, era así. Al guardar el objeto en el registro hacia que dos punteros apunten a la misma dirección. Entonces cuando destruía el objeto y, al tratar de acceder luego por el otro puntero, me botaba error ya que el puntero me llevaba a algo que ya no existía. Gracias ;).


La franja horaria es GMT +2. Ahora son las 20:04:52.

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