Ho fatto alcune modifiche alla funzione nuovoLibro, a quanto pare però così mi da segmentation fault quando provo ad accedere al puntatore inizio al di fuori della funzione. è sbagliato come tipo di approccio? Ho qualche dubbio sul come far interagire le funzioni con la lista in modo diretto.. Utilizzando semplicemente il puntatore non sembra funzionare.

codice:
int main(int argc, char *argv)
{
	int select, nLibri=0, mod;
	Libro *inizio = NULL;
	
	do{ //cicla fino a quando l'utente decide di terminare.
		makeMenu(&select);
		while (getchar() != '\n');
		
		switch(select){
			case 0: //exit
				break;
			case 1: //alloca libro, lo accoda e aggiorna nLibri
				if(nLibri < SIZE){
					nuovoLibro(inizio, nLibri);
					nLibri = countlibri(inizio);
					printf("Libro inserito correttamente(%d/%d).\n", nLibri, SIZE);
				}else
					printf("Lo spazio sugli scaffali della biblioteca è esaurito.\n");
				break;
			case 2: //stampa lista
				if(nLibri!=0)
					stampLibri(inizio); 
				else
					printf("Non ci sono libri.\n");
				break;
			case 5: //rimuove un libro dalla lista, aggiorna nLibri
				if(nLibri!=0){
					remLibri(inizio, nLibri);
					nLibri = countlibri(inizio);
					printf("Libro rimosso con successo(%d/%d).\n", nLibri, SIZE);
				}else
					printf("Non ci sono libri.\n");
				break;
		}
	}while(select != 0);
	destLibri(inizio);
return 0;
}

void makeMenu(int *select)
{
	printf("\t\t==M E N U==\n"
		   "0- Esci.\n1- Inserisci Libro.\n2- Visualizza Libri.\n3- Ricerca libri(1+ matching).\n4- Ricerca libri(full matching).\n5- Rimuovi libro.\n>");
	scanf("%d", select);
}

void nuovoLibro(Libro *inizio, int nLibri)
{
	Libro *p;
	Libro *temp = inizio;
	
	p= (Libro *) malloc(sizeof(Libro));
		
	printf("Inserire l'ID del libro: ");
	scanf("%d", &p->ID);
	while (getchar() != '\n'); //per pulire il buffer dopo scanf
	printf("Inserire l'Autore: ");
	fgets(p->Autore, 255, stdin);
	printf("Inserire il Titolo: ");
	fgets(p->Titolo, 255, stdin);
	printf("Inserire le 5 parole chiavi, separate da spazi: ");
	fgets(p->Parole, 255, stdin);
	
	if(nLibri == 0){		   //se è l'inizio della lista faccio puntare inizio all'elemento creato
		inizio = p;
	}else{				       //altrimenti scorro fino alla fine della lista e lo aggiungo in coda
		while(temp->next)	   
			temp= temp->next;
		temp->next = p;
	}
}