[C con Clase] ayuda por favor

Marcela Bustamante rompecocos7 en gmail.com
Lun Feb 18 00:32:20 CET 2013


Muchas gracias por tu ayuda, soy muy nueva en esto y no entiendo muy bien 
saludos.



El pasado 2013-02-15 18:00:27, Salvador Pozo escribió:
 
SP> El pasado 2013-02-15 15:19:35, Marcela Bustamante escribió:
SP>  
SP> MB> Buenas tardes, este ejercicio me está presentando el error segmentation
SP> MB> fault y la verdad que no tengo idea de que estoy haciendo mal desde ya
SP> MB> muchas gracias por la ayuda o información que me puedan brindar
SP> Hola:
SP> He encontrado algunos errores, aunque puede que se me haya escapado alguno.
SP> El primero está en la función de insertar.
SP> ----8<------
SP>    else {
SP>       /* Avanzamos hasta el último elemento o hasta que el siguiente tenga
SP>          un valor mayor que v */
SP>       while(actual-> siguiente && strncmp(actual->siguiente-> dato.Nombre,v.Nombre)< 0)
SP>       {
SP>           actual = actual-> siguiente;
SP>       } // 1º error: Esta llave estaba a continuación del último "if", es aquí.
SP>       /* Insertamos el nuevo nodo después del nodo anterior */
SP>       nuevo->siguiente = actual-> siguiente;
SP>       actual-> siguiente = nuevo;
SP>       nuevo-> anterior = actual;
SP>       if(nuevo->siguiente) nuevo->siguiente-> anterior = nuevo;
SP>    }
SP> ----8<------
SP> En la función Mostrar hay varios errores.
SP> Para empezar, no necesitas pasar un puntero a la lista para esta función, ya que se supone que la función de mostrar no va a modificar la lista. En cualquier caso, si pasas un puntero, las referencias están mal:
SP> ----8<------
SP> void mostrar(Lista *l)
SP> {
SP>     Lista aux;
SP>     aux=*l; // 2º error: aux es de tipo lista, pero l es un puntero a lista
SP>     if(aux) while(aux->anterior) aux = aux-> anterior; // Añadido
SP>     while(aux) // 3º error: Si usas como condición aux->siguiente, no se muestra
SP>                // el último elemento de la lista
SP>     {
SP> ----8<------
SP> La línea que he añadido es necesaria porque después de insertar un elemento es posible que lista no apunte al primer elemento de la lista, por eso retrocedo hasta el principio antes de mostrar la lista.
SP> Por último, en main hay dos errores:
SP> ----8<------
SP> int main(void)
SP> {
SP>     printf("Programa para crear una lista de datos\n ");
SP>     Lista l = NULL;
SP> //    l=(Lista)malloc(sizeof(tipoNodo));
SP> //    l->anterior=l-> siguiente=NULL;
SP>     int opcion=1;
SP> ----8<------
SP> Primero, he comentado las líneas que añaden un elemento a la lista. Inicialmente la lista debe estar vacía, es decir, lista debe ser un puntero nulo.
SP> Y finalmente, antes de abandonar el programa deberías liberar la memoria de la lista, es decir, borrar todos los elementos.
SP> Hasta pronto.
SP> -- 
SP> Salvador Pozo (Administrador)
SP> mailto:salvador en conclase.net
SP> _______________________________________________
SP> Lista de correo Cconclase Cconclase en listas.conclase.net
SP> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
SP> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ


Más información sobre la lista de distribución Cconclase