domanda da ignorante: ma la matrice allocata così all'interno della funzione, non rimane locale?

se rimanesse locale nel momento in cui la funzione termina questa viene cancellata, quindi il valore di ritorno è un puntatore a qualcosa che non esiste.

Spero di non aver fatto un intervento completamente fuori luogo

Ciao