E se l'errore è nelle

ordina_per_nome
ordina_per_cognome

come lo possiamo vedere?

P.S. A proposito ... che senso ha chiamare due funzioni che ordinano per campi diversi ?

EDIT: sei fortunato ... ... il problema è in

g.nomi[g.npers]

in cui g.npers non ha un valore valido in quanto non è inizializzato in precedenza.