Salve a tutti e grazie per il vostro tempo.
Ho iniziato a studiare le liste e devo fare un programma che crea una lista di n nodi e poi una funzione che trovi un nodo particolare immesso dall'utente.
Posto il codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct node {
	int val;
	struct node *next;	// puntatore al prossimo nodo
} node;
/*
 * head e' l'inizio della lista.
 * E' una variabile globale (si evita il passaggio del puntatore ad ogni funzione
 * che la richiede).
 */
node *head = NULL;
/*
 * crea un nuovo nodo, inserendo il valore (int value) nel membro val.
 * Ritorna un puntatore di tipo "node" se la creazione
 * del nodo sull'heap e' riuscita, altrimenti NULL
 */
node *makenode(int value) {
	node *new = malloc(sizeof(node));
	
	// controlla se l'allocazione e' riuscita ed inizializza i membri
	if ( new != NULL ) {
		new->val = value;
		new->next = NULL;
		return new;
	}
	return NULL;
}
/*
 * inserisce un nodo in CODA alla lista
 */
void enqueue(node *n) {
	node *tail = head;
	
	// primo nodo
	if ( head == NULL ) {
		head = n;
		return;
	}
	// scorre la lista fino alla fine
	while ( tail->next != NULL )	
		tail = tail->next;
	
	// aggancia il nodo in coda
	tail->next = n;
}
/*
 * cancella tutti i nodi della lista
*/
node *findnode(int value){
     
     node *tail = head;
     
     while( tail->next != NULL )
            if(value == tail->val)
            return tail;
            else
            tail = tail->next;
     return NULL;
}
void rmlist(void) {
//????Gia perfezionata
	while ( head != NULL ) {
		node *t = head->next;
		free(head);
		head = t;
	}
}
/*
 * stampa il contenuto della lista (membro val di ogni nodo)
*/
void dumplist(void) {
	
	node *t = head;
	while ( t != NULL ) {
		printf("Val = %d\n", t->val);
		t = t->next;
	}
}
// main
int main() {
	int i = 0;
	int y;
	clock_t t;
	
	printf("Numbers of node: ");
	scanf("%d", &y);
    t = clock();
	// inserisce dei nodi
	while ( i < y ) {
		node *n = makenode(i);
		if ( n != NULL )
			enqueue(n);
		i++;
	}
    t = clock() - t;
  
	// stampa tutta la lista
	//dumplist();
	// cancella la lista
	rmlist();
	
	printf ("It took me %d clicks (%f seconds).\n",t,((float)t)/CLOCKS_PER_SEC);
    node *a;
    printf("\nNodo da cercare: ");
    scanf("%d", &y);
    
    a = findnode(y);
    
    if( a != NULL)
    printf("Nodo trovato: %d", a->val);
    else
    printf("Nodo non trovato");
    
    system("pause");
	return 0;
}
Il problema è che dopo aver inserito il valore del nodo da cercare e premuto invio mi parte la segnalazione errori.
Come mai?? Non capisco perché queste cose non si presentino in fase di compilazione...
Evidentemente l'errore dev'essere nella funzione findnode, ma a me sembra proprio tutto a posto. HELP!
P.s
Lasciate stare l'evidente complessità della funzione enqueue, l'importante è che funzioni.