E' strano, ma ho risolto.
Ho isolato varie porzioni di programma come mi avevi suggerito, ma tutte sembravano girare senza problemi. Poi mi sono accorto che il createMatrix che ho postato ha un piccolo errore concettuale: il ciclo for (i = 0; i < rows; i++) dovrebbe essere for (i = 0; i < lines; i++).
Corretto questo non ho più avuto problema.
Me la sono spiegata in questo modo: Penso che la prima volta che parta l'exe la memoria allocata per la matrice si trovi per qualche motivo prima di altre variabili dello stesso programma ed è normale che quando sconfinavo per riempire la matrice negli spazi non correttamente allocati andassi a cancellare variabili utili al programma. Con il secondo run la memoria allocata per qualche ragione cambia (forse perchè il programma si bloccava prima di "free(M)"?) e pertanto il problema non appariva più.
Qualsiasi spiegazione più affidabile è bene accetta!
per ora sono contento che non si manifesta più il problema, se dovesse ricomparire vi farò sapere.
Grazie Samuele per l'apporto!![]()