Hola! una pregunta, empezas los indices de las matrices en 1 por que te parece mas comodo??? o porque no sabes que empieza en cero??
El problema es que estas accediendo fuera de la memoria asignada por malloc. Supongamos que creas un arreglo dinamico de 5 elementos, y si vos haces i=1 y en la condicion del for pones i<=5; cuando ingresas datos se almacenan en las posiciones 1 2 3 4 5 del arreglo,
PERO los arreglos empiezan desde el cero, posiciones: 0 1 2 3 4 (cinco posiciones), por lo tanto arr[5] no pertenece al arreglo.... y a esto se debe el error del programa(aplicado a las matrices)
Soluciones: si usas i=1, vas a teneer q reservar un elemento mas; ó usas i=0 y en la condicion i<n (lo cual es mas optima ya que no desperdicias un elemento)
Para liberar la memoria reservada, se hace el proceso inverso a como lo reservaste, ej:
for(i=0; i<m; i++)
y asi para las demas matrices.... Saludos