Salve a tutti, sto studiando le liste in C (ANSI).
Ho creato questa lista
typedef struct studente {
char *nome;
char *cognome;
int matricola;
char *nesame; /* nome esame */
int vesame; /* voto esame */
struct studente *link;
} Studente;
/* puntatore al primo componente della lista */
Studente *nextlist = NULL;
e ho scritto questa funzione per l'inserimento ordinato nella lista!
La funzione fa il suo dovere ma quando la lista è vuota e provo ad inserire un nuovo studente il programma mi resstituisce un errore di segmentazione.
Ecco la funzione
void insord(char* cg, char* nm, int matr, char* nexam, int vexam) {
Studente *prec = NULL;
Studente *cur = nextlist;
Studente *ptr = (Studente*)malloc(sizeof(Studente));
ptr->link = NULL;
ptr->cognome = (char*)malloc(sizeof(char)*(strlen(cg)+1));
strcpy(ptr->cognome, cg);
ptr->nome = (char*)malloc(sizeof(char)*(strlen(nm)+1));
strcpy(ptr->nome, nm);
ptr->matricola=matr;
ptr->nesame = (char*)malloc(sizeof(char)*(strlen(nexam)+1));
strcpy(ptr->nesame, nexam);
ptr->vesame=vexam;
#ifdef debug
printf("\nDEBUG - InsO - com %s %s = %d", cg, cur->cognome, strcmp(cg, cur->cognome));
#endif
while (cur && (strcmp(cg, cur->cognome)>0)) {
/* passaggio al nodo successivo */
prec = cur;
cur = cur->link;
} /* end of while */
/* inserire un nuovo nodo all'inizio della lista */
if (!prec) {
ptr->link = nextlist;
nextlist = ptr;
} /* end of if */
else {
prec->link = ptr;
ptr->link = cur;
} /* end of else */
} /* end insord */
Sapreste dirmi qual'è l'errore?
Grazie in anticipo a quanti mi risponderanno!