Autor
|
Tema: Problema al insertar en listas abiertas. (Leído 3,000 veces)
|
samur88
Desconectado
Mensajes: 125
|
Saludos. El tema de las listas en C me esta volviendo loco, a ver si podéis ayudarme en el siguiente error. Tengo la siguiente lista abierta, el caso es que el programa me compila pero supuestamente en la lista solo esta el primer elemento, a la hora de mostrármela solo me muestra el 4. #include <stdio.h> #include <stdlib.h>
typedef struct listacompleta { int dato; struct listacompleta *next; }lista;
lista *primero;
void add_nod(int dato){ lista *nuevo,*aux; nuevo = (lista *) malloc (sizeof(lista)); nuevo->dato = dato; nuevo->next = NULL; if(primero == NULL){ aux = primero; primero = nuevo; } else { aux = primero; while(aux != NULL){ aux = aux->next; } aux = nuevo; } }
void see_list(lista *primero){ lista *auxiliar; int i; auxiliar = primero; while (auxiliar!=NULL) { printf( "%d\n",auxiliar->dato); auxiliar = auxiliar->next; i++; } if (i==0) printf( "\nLa lista está vacía!!\n" ); } main(){ primero = NULL; add_nod(4); add_nod(3); add_nod(5); see_list(primero); }
Un saludo.
|
|
|
En línea
|
|
|
|
satu
Desconectado
Mensajes: 301
Siempre aprendiendo
|
Hola prueba así void add_nod(int dato){ lista *nuevo,*aux; nuevo = (lista *) malloc (sizeof(lista )); nuevo->dato = dato; nuevo->next = NULL; if(primero == NULL){ primero = nuevo; } else { aux = primero; while(aux->next != NULL){ aux = aux->next; } aux->next = nuevo; } }
Además tienes otros errores -main debe devolver un entero -en la funcion see_list debes inicializar la variable "i" a cero Saludos
|
|
« Última modificación: 2 Diciembre 2010, 19:47 pm por satu »
|
En línea
|
Breakbeat como forma de vida
|
|
|
samur88
Desconectado
Mensajes: 125
|
Muchas gracias por la resuesta, funciona a la perfección, ¿Podrías explicármelo por favor? No entiendo por que tu código no da fallo de segmentación, ya que en algún momento aux sera igual a NULL, y por lo tanto aux->next no existirá, lo cual sería fallo de segmentación pero aún asi el código me funciona. Podrías echarme una mano para comprender lo que has hecho ^^ Un saludo, y gracias de nuevo.
|
|
|
En línea
|
|
|
|
Leber
Desconectado
Mensajes: 338
"Fracta, non verba"
|
Fijate en esto: while(aux != NULL) { aux = aux->next; }
Estas comparando si el puntero aux es NULL, pero luego asignas aux->next a aux, que si que puede apuntar a NULL. Ahora su codigo hace: while(aux->next != NULL) { aux = aux->next; }
Antes de asignar aux->next a auxt, comprueba que aux->next no sea un puntero invalido. Saludos
|
|
|
En línea
|
"Solo los tontos carecen de preucupaciones." Johann Wolfgang Goethe
|
|
|
samur88
Desconectado
Mensajes: 125
|
Muchísimas gracias por la respuesta, ahora ya me quedo todo claro Seguiré viendo las listas, espero que no me surjan muchas dudas mas por que la verdad es que me traen loco los malditos punteros y listas. Un saludo y gracias de nuevo ^^.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con Listas
Java
|
HadesDark
|
2
|
2,588
|
9 Noviembre 2007, 22:00 pm
por Ragnarok
|
|
|
Problema con las listas de reproduccion en el iPod Shuffle
Foro Libre
|
Razgriz
|
4
|
3,841
|
11 Junio 2010, 13:14 pm
por Razgriz
|
|
|
Uso de Listas: Subprograma que lea 2 listas y forme una.
Dudas Generales
|
hbenitez
|
2
|
3,556
|
8 Agosto 2010, 20:11 pm
por hbenitez
|
|
|
Ayuda Acerca De Listas y Listas Circulares (Revienta Memoria :S)
Programación C/C++
|
Gerik
|
0
|
6,043
|
12 Septiembre 2010, 01:49 am
por Gerik
|
|
|
Listas simples (Insertar Buscar)
Java
|
Dany Solis
|
1
|
5,191
|
29 Noviembre 2018, 16:41 pm
por Serapis
|
|