Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: IrvWinchester en 3 Agosto 2017, 11:10 am



Título: Urgente apuntadores
Publicado por: IrvWinchester en 3 Agosto 2017, 11:10 am
Hola, soy nuevo en el foro, recurrí porque no encuentro solución a mi problema por más que navegué e intenté por mi mismo y me siento un poco frustrado; les comento, estoy realizando una agenda que por el momento tiene las siguientes funciones: agregar, buscar, eliminar.

Actualmente todo me funciona de maravilla, excepto en eliminar, sólo logro que elimine el primero elemento, a partir del segundo en adelante me marca errores y me saca de la ejecución del programa, les adjunto el código, compilo en Borland.

Código:
int eliminar(){
agenda *temp = primero;
   char pal_clave[100];
   gets(bas); //variable para almacenar la tecla intro
   printf("\n Dame el nombre completo de la persona a borrar: ");
   gets(pal_clave);

   //este ciclo recorre la agenda hasta encontrar el nombre
   do{
   //si la palabra clave a buscar coincide con el nombre
   if(strcmp(pal_clave,temp->nombre) == 0){
     //si es la primera en la lista
   if (temp == primero){
         //si no tiene registro en su campo siguiente
         if(temp->sig== NULL){
             primero = NULL;
     ultimo = NULL;
               free(temp);
     }
            else{
     //si tiene registros en su campo siguiente, este se asigna al primero
             primero=temp->sig;
     primero->ant = NULL;
     }
return true;
     }

     if(temp == ultimo){
         ultimo = temp->ant;
            ultimo -> sig = NULL;
            free(temp);
            return true;
     }
     temp->ant->sig=temp->sig;
     temp->sig->ant = temp->ant;
     //libero espacio en memoria del registro borrado
     free(temp);
     return true;
     }
      //avanza al siguiente en la lista
     temp = temp->sig;
}
   while(temp != NULL);
return false;
}


Título: Re: Urgente apuntadores en agenda eliminar
Publicado por: SubAtomicParticula en 3 Agosto 2017, 13:37 pm
Saludos IrvWinchester:

El error lo tienes en la funcion agregar(), te indico el codigo modificado que funciona:

void agregar(){
   agenda *nuevo;
   nuevo = (agenda *)malloc(sizeof(agenda));         //reservando la memoria

----------------------------
   nuevo->sig= NULL;

   if(primero==NULL){
      primero=nuevo;
      ultimo=nuevo;
      // FALTA NULL A PUNTERO ANTERIOR
      nuevo->ant = NULL;
   }
   else{
      ultimo->sig=nuevo;
      // FALTA ASIGNAR EL PUNTERO ANTERIOR para en nuevo elemento
      nuevo->ant = ultimo;
      ultimo=nuevo;
   }
-------------------------------
}

Espero haberte ayudado. Un saludo.


Título: Re: Urgente apuntadores en agenda eliminar
Publicado por: IrvWinchester en 3 Agosto 2017, 18:54 pm
Gracias, sirvió de maravilla! Era algo que estaba pasando por alto!