Te estás haciendo un lío con los punteros:
Si haces:
Lista1 = malloc()
y después haces
Lista1 = CrearMiembro
¿qué sucede con la primera reserva de memoria? se pierde, dejando por el camino lo que se llaman fugas de memoria. El efecto de estas fugas de memoria es que la máquina cada vez va a tener menos memoria disponible, ya que no se libera, hasta que llega un punto en el que se le agota la memoria libre y algo acaba cascando.
Es decir, si llamas a
CrearMiembro (que en tu primera versión no lo hacías hasta después de intentar acceder a los miembros de
Lista1) no necesitas hacer
malloc.
Además, en el main sigues teniendo punteros sin inicializar:
Código C:
Ver originalchar *Nombre;
// ...
printf("Indique el nombre que quiere introducir: ");
¿Dónde está la memoria reservada para almacenar la cadena de
Nombre? En ningún sitio.
Puedes optar por calcular un tamaño lo suficientemente grande como para que entre cualquier nombre y evitar el uso de memoria dinámica:
Por otro lado, si analizamos la función
CrearMiembro:
Código C:
Ver originalmiembro *CrearMiembro(miembro *Lista, double telefono, int anios, char *name)
{
miembro *NuevoMiembro, *aux;
NuevoMiembro
= (miembro
*) malloc(sizeof(miembro
));
if(NuevoMiembro != NULL){
NuevoMiembro->edad = anios;
NuevoMiembro->telef = telefono;
NuevoMiembro->nombre = name; // <<--- 1
NuevoMiembro->sig = NULL;
}
if (Lista == NULL){
Lista = NuevoMiembro;
}
else
{
aux = Lista;
while(aux->sig != NULL){
aux = aux->sig;
}
aux = NuevoMiembro; // <<--- 2
}
return Lista;
}
1. Las cadenas de texto no se pueden copiar así... o bien declaras
nombre como un array de tamaño fijo o bien haces una reserva dinámica de memoria para que entre la cadena que quieres copiar y, a continuación, tienes que usar
strcmp para copiar una cadena en otra. Si haces una copia de punteros tienes que ser consciente de que la dirección de memoria apuntada es compartida y tienes que manejarla con cuidado.
2. ¿Aquí no tendría que ser aux->sig = NuevoMiembro?
Y, bueno, ya puestos, lo mejor sería que empezases a trastear con el depurador de código. Es una herramienta imprescindible en este mundillo y es mejor aprender a usarla con programas pequeños.
Un saludo