Stai corrompendo lo stack in qualche modo con qualche scrittura/copia non lecita.
Una possibile causa può essere questa istruzione
che è sicuramente errata in quanto, essendo "permessi" (in quel punto del codice) dichiarata ma non inizializzata, la strlen() restituisce un numero impredicibile che può essere anche maggiore della dimensione del buffer.codice:memset(permessi, 0, strlen(permessi));
Non è detto che sia quella la causa dell'errore ma di sicuro è un'istruzione non corretta.