Cita:
Iniciado por CalgaryCorpus
En la estructura personas, tienes espacio para un entero (la edad) y un puntero. Aun no has pedido memoria para guardar el nombre.
Tienes que pedir memoria para guardar el string con el nombre y guardar la direccion de memoria en el puntero que tiene esa estructura.
De otra manera, cuando escribes en el campo nombre, estas sobreescribiendo una zona de memoria desconocida y tu programa, como dices tu, "salta".
Puedes mantener el ciclo en mostrar, si quieres mostrar la lista completa, basta que controles que el puntero no sea NULL y avanzarlo al siguiente en cada vuelta.
Muxas gracias x tu respuesta, realmente no estaba teniendo en cuenta q tenia un puntero y no una cadena de caracteres. He modificado la estructura de forma que:
Código:
struct personas {
char nombre[15];
int edad;
struct personas *siguiente;
};
ahora ya me funciona perfectamente la inserccion de personas pero me sigue dando problemas a la hora de mostrar, tengo este codigo:
Código:
void insertar(struct personas **primera, struct personas **ultima, int *nPersonas){
struct personas *persona;
if ((persona=malloc(sizeof(struct personas)))==NULL){
puts("Error al asignar la memoria");
} else {
puts("Dime el nombre de la persona: ");
gets(persona->nombre);
fflush(stdin);
puts("Dime la edad: ");
scanf("%d",&persona->edad);
fflush(stdin);
persona->siguiente=NULL;
if ((*nPersonas)==0){
*ultima=persona;
*primera=persona;
} else {
(**ultima).siguiente=persona;
*ultima=persona;
}
(*nPersonas)++;
printf("Nombre: %s\nEdad: %d\n",(**ultima).nombre,(**ultima).edad);
puts("Insercion correcta");
}
}
void mostrar(struct personas *primera, int *nPersonas){
struct personas *perActual=primera;
if ((*nPersonas!=0)){
printf("Nombre: %s\nEdad: %d\n",perActual->nombre, perActual->edad);
} else {
puts("No hay personas insertadas");
}
}
he probado a poner simplemente: printf("Nombre: %s\nEdad: %d\n",primera->nombre, primera->edad); y me sigue "saltando" error.
No entiendo xk me da error si le estoy pasando el puntero q esta apuntando a la estructura de la primera persona y luego la estoy mostrando :S
De nuevo muchas gracias x tu tiempo y la ayuda q me estas dando.