Alla malloc di strcognome c'è il segmentation fault...penso sia dovuto al fatto che non allochi la scheda, quindi non può recuperare la lunghezza di s->autore->cognome...codice:void main() {scheda_t *res=NULL; res = new_scheda(); if(res==NULL){printf("non allocata scheda\n");} else{printf("allocata! ora la libero...\n"); print_scheda(stdout, res); /*stampa la scheda vuota*/ free_scheda(&res); /*libera la scheda*/ if(res!=NULL){printf("non liberata\n");} else{printf("liberata!\n");} } printf("fine\n"); } void print_scheda (FILE* f, scheda_t * s) { char *strcognome; strcognome=malloc(sizeof(strlen(s->autore->cognome)+1)); strcognome=strncpy(strcognome, s->autore->cognome, sizeof(strlen(s->autore->cognome)+1) ); strcognome=strcat(strcognome, STRING_NULL); }