Prima di trovare il problema , ci sono cose che non capisco , potresti spiegarle ???

Il parametro TTree tree , non dovrebbe essere un puntatote ?

nella funzione inserisci_razza
while(elenco[0][i]=='\0'){
i++;
}
strcpy(elenco[i],razza);
qui la variabile i ha il valore della lunghezza della della prima stringa della matrice

quindi se la lunghezza della prima stringa fosse 15

tu salvi razza nella 16 riga della matrice !?

secondo me volevi mettere [riga i ][carattere 0]
while(elenco[i][0]=='\0'){
i++;
}

stesso problema degli indici ripetuto in tutte le funzioni !

Se vuoi spiegare un po , cosi magari si trova anche l'errore