a cosa serve allocare dinamicamente "n" (visto che non viene chiesto di immetterla) in X e Y in main()...
Non ho riportato tutto il main(), n è immessa dall'utente da tastiera.

la funzione che hai postato chiama altre 4/5 funzioni e sicuramente l'errore si verifica in una di queste
Ok, potrebbe anche darsi, ma qualsiasi cosa facciano le 4/5 funzioni che vengono chiamate il fatto che prima di uscire gli array vengano deallocati con free non dovrebbe riportare tutto allo stato iniziale e quindi pronto per la prossima allocazione-esecuzione?