Ver Mensaje Individual
  #7 (permalink)  
Antiguo 18/03/2010, 11:52
nosek159
 
Fecha de Ingreso: octubre-2008
Mensajes: 118
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: proplema con paso de punteros de structuras a funciones

Cita:
Iniciado por CalgaryCorpus Ver Mensaje
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.