Foros del Web » Programación para mayores de 30 ;) » C/C++ »

problema con lista enlazada c++

Estas en el tema de problema con lista enlazada c++ en el foro de C/C++ en Foros del Web. hola para un programa requiero la utilizacion de lista enlazadas por limitaciones de memoria, compilo desde netbeans 6.5 para debug en ubuntu 'no se si ...
  #1 (permalink)  
Antiguo 28/12/2008, 18:43
 
Fecha de Ingreso: octubre-2008
Mensajes: 23
Antigüedad: 15 años, 6 meses
Puntos: 3
problema con lista enlazada c++

hola para un programa requiero la utilizacion de lista enlazadas por limitaciones de memoria, compilo desde netbeans 6.5 para debug en ubuntu 'no se si usara g++ internamente', toda la compilacion es correcta el programa se nutre saticfactoriamente de la esructura celda, pero me indica dos errores en la estructura celda en las funciones inserta y buscarElem. no se si cometo errores ya que anteriormente trabaje con java y puede que arrastre algun vicio que no sea compatible en c++.

class celda
{
private:

int valor;
celda *ptr;

public:

celda(){
valor=-1;
ptr=NULL;
}

celda(int e){
valor=e;
ptr=NULL;
}

void insertar(int e){
if(valor==-1){valor=e;}
while(ptr!=NULL){
28) ptr.insertar(e);
}
ptr=new celda(e);
}


bool buscaElem(int e){
if (ptr==NULL) return(false);
while(valor!=e){
36) return (ptr.buscaElem(e));
}
return (true);
}

};

los errores que me indica en las lineas 28 y 36 son:

newmain.cpp: In member function ‘void celda::insertar(int)’:
newmain.cpp:28: error: solicitud por el miembro ‘insertar’ en ‘((celda*)this)->celda::ptr’, el cual es del tipo ‘celda*’ que no es clase
newmain.cpp: In member function ‘bool celda::buscaElem(int)’:
newmain.cpp:36: error: solicitud por el miembro ‘buscaElem’ en ‘((celda*)this)->celda::ptr’, el cual es del tipo ‘celda*’ que no es clase


gracias de antemano. un saludo.

Última edición por juancxo; 28/12/2008 a las 18:48 Razón: tabulaciones
  #2 (permalink)  
Antiguo 30/12/2008, 05:19
poi
 
Fecha de Ingreso: octubre-2008
Mensajes: 73
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: problema con lista enlazada c++

Lo que pasa que ptr es un puntero no una clase, entonces para llamar a las funciones seria con el operador (->)

ptr -> insertar(e);

De todas formas hay algunas cosas que no veo claras, por ejemplo en insertar haces un bucle infinito, nunca avanzas el puntero ptr, siempre estas comprobando con la primera posicion y tambien haces una llamada recursiva que nunca acaba. Lo que deberias hacer es declararte un puntero auxiliar para recorrer la lista. Y otra cosa es que el new se hace antes de intentar insertar el elemento si no intentas insertar algo que no sabes lo que es.

y en bucaElemnto pasa lo mismo.

No se si es eso lo que preguntabas..
Saludos
  #3 (permalink)  
Antiguo 30/12/2008, 14:44
 
Fecha de Ingreso: octubre-2008
Mensajes: 23
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: problema con lista enlazada c++

gracias poi ya voy cojiendo conceptos que tenia erroneos, bien ahora mismo sin en mi programa principal no utilizo el comando delete no tengo errores, ya tengo la lista implementada, -> es util ;) y definir las cabezeras y las implementaciones fuera de la clase... resuelto eso tengo otro problema
debo utilizarlo para poder volver a utilizar la estructura grafo que utiliza la etructura lista y no colapsar la memoria, libero mam y creo otra estructura. la clase grafo se representa con una tabla de dispersion abierta, es decir un array de [MAX_NODOS] de listas implementadas en celda


class grafo
{

...

grafo();
~grafo();
void inserta(int l, int e);
bool buscarElem( int l, int e );

...

grafo::~grafo()
{

delete[] listas;

}

...

}


la llamada en el main es, dentro de un bucle para resolver un numero variable de laberintos

int main(){

...

grafo *laberinto=new grafo();

...

delete laberinto;
}


el delete es donde produce el error tras una primera buena ejecucion. el error es el siguiente:

*** glibc detected *** ... free(): invalid next size (fast) ...

======= Backtrace: =========
...
======= Memory map: ========
...

el error lo produce cuando el debugger esta en la linea del destructor del tipo grafo, gracias poi se agradece la ayuda, el programa como imaginaras es para la uni. thank

Última edición por juancxo; 30/12/2008 a las 14:55
  #4 (permalink)  
Antiguo 31/12/2008, 07:59
poi
 
Fecha de Ingreso: octubre-2008
Mensajes: 73
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: problema con lista enlazada c++

Pon el constructor de grafo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:30.