Dovresti aprire un thread apposito per la tua domanda, non "accodarti" ad un altro che non c'entra poco con la tua domanda.
Cmq, se allochi nello stack devi specificare la dimensione dell'oggetto. Nel tuo caso n e m non sono inizializzate e non si sa quanto valgono.
Di conseguenza mat ha una dimensione ignota. Di conseguenza è possibile che nel tuo ciclo vai fuori dalla dimensione di mat ed il programma va in crash.
Se la dimensione non la sai a priori, devi allocare in modo dinamico, ad esempio:
codice:
#include<iostream>
#include<stdlib.h>
using namespace std;
int main(){
int n;
int m;
int **mat;
cout<<"Inserire numero righe ";
cin>>n;
cout<<"Inserire numero colonne ";
cin>>m;
mat = new int*[n];
for(int i=0; i<n; i++){
mat[i] = new int[m];
cout<<"Inserire elemento della "<<i+1<<" riga \n";
for(int j=0; j<m; j++){
cin>>mat[i][j];
}
}
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
cout<<mat[i][j];
}
cout<<"\n";
}
system("pause");
return 0;
}
Se vuoi mantenere la matrice nello stack, devi fare una cosa del genere:
codice:
#include<iostream>
#include<stdlib.h>
#define R 100
#define C 100
using namespace std;
int main(){
int n;
int m;
int mat[R][C];
cout<<"Inserire numero righe ";
cin>>n;
cout<<"Inserire numero colonne ";
cin>>m;
// n deve essere <= R e m <= C
for(int i=0; i<n; i++){
cout<<"Inserire elemento della "<<i+1<<" riga \n";
for(int j=0; j<m; j++){
cin>>mat[i][j];
}
}
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
cout<<mat[i][j];
}
cout<<"\n";
}
system("pause");
return 0;
}
Ovviamente è uno spreco di memoria