Liste C - Inserimento ordinato

di il
5 risposte

Liste C - Inserimento ordinato

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!

5 Risposte

  • Re: Liste C - Inserimento ordinato

    Cioè? Quando avviene l'errore? Mostra anche un esempio di main in cui l'errore si manifesta.
  • Re: Liste C - Inserimento ordinato




    Questa invece è l'esecuzione della funzione dopo che nella lista è già stato inserito un elemento:


  • Re: Liste C - Inserimento ordinato

    E il codice del main che ti chiedevo? Non mi serve la schermata ...
  • Re: Liste C - Inserimento ordinato

    Eccolo:



    è la sezione dello "switch" che contiene la chiamata della funzione.
  • Re: Liste C - Inserimento ordinato

    Il problema è nella

    #ifdef debug
    printf("\nDEBUG - InsO - com %s %s = %d", cg, cur->cognome, strcmp(cg, cur->cognome));
    #endif

    che evidentemente non può essere eseguita se la lista è vuota.
Devi accedere o registrarti per scrivere nel forum
5 risposte