Questo è il problema: http://vinello.isti.cnr.it:10000/#/task ... /statement
Comunque, anche senza stare a leggerlo tutto, dovreste poter vedere un errore nella porzione di codice che ho evidenziato sotto. Ottengo segmentation fault, anche solo digitando solo 1 e poi un nome.

Valgrind dice:
==3223== Use of uninitialised value of size 8
==3223== at 0x4008DE: main (in /home/cristina/simEsame)
==3223==
==3223== Invalid write of size 8
==3223== at 0x4008DE: main (in /home/cristina/simEsame)
==3223== Address 0x8 is not stack'd, malloc'd or (recently) free'd
==3223==
[...]
==3223== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
Errore di segmentazione

...ma non vedo l'errore.
#include #include #include typedef struct _elem { char* key; struct _elem *next; } elem; int compare(const void *a, const void *b){ return strcmp(*(char**)a, *(char**)b); } elem* InserisciCoda(char *s){ elem *new; new=(elem*)malloc(sizeof(elem)); new->key=s; new->next=NULL; return new; } elem* RimuoviPrimo(elem *head){ elem *curr = head; head=head->next; free(curr); return head; } void OrdinaLista(elem *head){ int len, i; elem *curr = head; while(curr!=NULL) len++; curr=head; char **a; a = (char **) malloc(len*sizeof(char*)); i=0; while(ikey; i++; } qsort(a,len,sizeof(char*),compare); for(i=0;inext; } [/b] if (x==2) head=RimuoviPrimo(head); } if (head==NULL) {printf("$\n"); return 0;} OrdinaLista(head); while(head!=NULL){ curr=head; head=curr->next; free(curr); } return 0; }