Ciao ragazzi,
devo inserire delle stringhe in una lista, aggiornandone solo il numero di occorrenze nel caso in cui la stringa sia già presente. Il codice che ho scritto è il seguente ma mi dà problemi nell'inserimento. In particolare non riesce a effettuare il controllo del campo word con la parola da inserire, e mi dice in continuazione che la lista è vuota..qualcuno può aiutarmi?

codice:
struct stringa
{
	char *word;
	int number;
	struct parola *next;

};

void inserisci(char *w, struct stringa *punt)
{
	
	//devo allocare spazio per il nuovo elemento
	struct stringa *nuova;
	nuova=alloca_memoria();
	
	//alloco spazio per il campo char *word
	if((nuova->word=(char *)malloc(strlen(w)+1))==NULL)
	{
		fprintf(stderr, "Errore allocazione memoria\n");
		exit(EXIT_FAILURE);
	}
	
	//copia della parola
	printf("copio\n");
	strcpy(nuova->word,w);
	nuova->occorrenze=1;
	printf("occorrenza aggiornata\n");
	
	//aggiorno puntatori
	punt=nuova;
	nuova->next=NULL;
	printf("puntatori aggiornati\n");

}





void controlla(char *word, struct stringa *testa)
{
	struct stringa *p; //per appoggio
	int trovata=0; //flag
	p=testa;
	
	//se la lista è vuota devo per forza inserirla
	if(p==NULL)
	{	printf("lista vuota\n");
		inserisci(word,testa);
	}
	
	//se la lista non è vuota, la scorro e controllo se c'è la parola
	else 
	{	//scorri la lista
		for(p=testa; p->next==NULL || trovata==0 ; p=p->next)
		{	
			if(strcmp(p->word,word)==0)
			{	
                                printf("gia in lista!!!!\n");
				//aggiorno solo le occorrenze
				(p->number)++;
				trovata=1;	
			}
		
		}	
		//se alla fine non l'ho trovata, la inserisco
		inserisci(word,p);	
	}

}
nella main imposto che
struct string *testa=NULL;