E per quanto riguarda la funzione visualizza può essere che sia perchè richiami la funzione con NULL (caso non gestito dalla tua funzione)...
Puoi benissimo semplificare la funzione acodice:void visualizza(alb *r){ if(r!=NULL) { visualizza(r->left); printf("%s", r->cognome); visualizza(r->right); } }