Stai corrompendo lo stack in qualche modo con qualche scrittura/copia non lecita.

Una possibile causa può essere questa istruzione

codice:
    memset(permessi, 0, strlen(permessi));
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.

Non è detto che sia quella la causa dell'errore ma di sicuro è un'istruzione non corretta.