elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección.


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Urgente apuntadores
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Urgente apuntadores  (Leído 274 veces)
IrvWinchester

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Urgente apuntadores
« en: 3 Agosto 2017, 11:10 »

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;
}


« Última modificación: 3 Agosto 2017, 18:54 por IrvWinchester » En línea

SubAtomicParticula

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Urgente apuntadores en agenda eliminar
« Respuesta #1 en: 3 Agosto 2017, 13:37 »

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.


En línea

IrvWinchester

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Urgente apuntadores en agenda eliminar
« Respuesta #2 en: 3 Agosto 2017, 18:54 »

Gracias, sirvió de maravilla! Era algo que estaba pasando por alto!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con apuntadores!!!!!!
Programación C/C++
7hongo7 7 1,482 Último mensaje 5 Julio 2013, 10:16
por kmilinh0
[C] Apuntadores a estructuras « 1 2 »
Programación C/C++
edr89 10 2,410 Último mensaje 8 Octubre 2013, 05:48
por edr89
Struct y apuntadores
Programación C/C++
Cas980 1 340 Último mensaje 3 Abril 2014, 05:22
por rir3760
Apuntadores con c++ Ayuda!!!
Programación C/C++
bamdrums 5 978 Último mensaje 18 Enero 2015, 08:25
por engel lex
Arreglo de apuntadores
Programación C/C++
CGB 0 169 Último mensaje 1 Octubre 2015, 01:19
por CGB
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines