L'errore sta nel fatto che chiami ricorsivamente la funzioen sui figli senza aver prima verificato se i figli esistono, causando un errore di memoria. Precisaemnte l'errore si ha nel caso in cui un nodo ha un solo figlio, in questo caso non è una foglia e quindi il secondo if non è eseguito e si passa alle chiamate ricorsive sui figli.

Una versione corretta è:

codice:
bool esiste_cammino(nodo *t,int tot,int punteggio){
	if (t == NULL){
		return false;
	}
	if (foglia(t) && tot==punteggio) return true;
		else return false;
	bool l = false, r = false;
        if(t->left)
              l = esiste_cammino(t->left,tot+t->info,punteggio);
	if(t->right)
               r = esiste_cammino(t->right,tot+t->info,punteggio);
	return l || r;
}