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!
|