Alcune inesattezze nel metodo Crea_matrice, l'errore effettivamente era nella creazione della matrice.

codice:
void sudoku::Crea_matrice(int **&g,int &n) // devi passare entrambe le variabili per riferimento
{
    char *nomefile=new char[260]; // 10 char sono troppo pochi, 
    // per i nomi dei file meglio usarne almeno 260
    cout<<"Inserire il nome del file: ";
    cin>>nomefile;
    ifstream fin(nomefile);
    if( ! fin.is_open() ) // controllo che il file sia aperto
        return;
    fin>>n;
    
   // Quì ci vorrebbe un controllo sulla matrice **g, e se esiste già, cancellarla.

    g = new int* [n];
    for( int i=0; i<n; i++ )
        g[i] = new int [n];
        
    for( int i=0; i<n; i++ )
    {
        for( int j=0; j<n; j++ )
            fin>>g[i][j];
    }
    fin.close();
    delete [] nomefile;
    // delete  g; // la memoria di una matrice non rilascia così, ma poi... Perché cancellare la matrice appena creata ?
}
inizializza sempre le variabili, mi riferisco a **g e n nella main(), che non fa mai male.