Originariamente inviato da giova87
numero_parole è inizializzato a zero..

il primo ciclo
codice:
while(temp != NULL && numero_parole <= 100 )
lo fa una sola volta ( e non capisco il motivo)
Bè ma quindi non deve essere rispettata una delle due condizioni... Che numero_parole sia <= 100 è evidente, quindi non resta che controllare che temp sia diverso da NULL...
Quando fai:

codice:
while(temp != NULL)
				{						
					if(temp->frequenza == massimo)
					{				
										
						fprintf(fpw,"%d %s \r\n",temp->frequenza,temp->parola);	
						numero_parole++;

						if(temp == testa)
						{
							if(temp->next != NULL)		
							{
								testa = testa->next;										
							}								
							else
							{	//lista finita
								break;								
							}
						}		
						canc=temp;
						temp=temp->next;
						prev->next=temp;
						free(canc);					
						
					
												
					}
					else
						{
							prev=temp;
							temp=temp->next;
						}
						

				}
spulci tutto "temp" fino alla fine giusto?
Quindi prima di uscire dal ciclo, come ultima cosa, non dovresti fare di nuovo:

codice:
temp = testa;
??