Trattandosi di array, non di deallocano con `delete`, ma con `delete []`:
(anche se alcuni compilatori tendono a perdonare questo errore)codice:for(int i=0;i<o;i++) {delete[] M[i];delete[] m[i];}; for(int i=o;i<2*o;i++) {delete[] m[i];}; delete[] m; delete[] M; delete[] tmp;