Buenas,
El error es complicado de ver, pero se trata de un pequeño matiz a la hora de crear la memoria con new.
Fíjate en la diferencia:
Código C++:
Ver original//Estoy inicializando memoria para una variable de tipo entero y asignandole el valor 5
int *puntero = new int(5);
//Estoy inicializando memoria para 5 variables de tipo entero (consecutivas en memoria)
int *puntero = new int[5];
Ahora fíjate en tu código:
Código C++:
Ver originalint **trans(int **a, unsigned n, unsigned m) {
unsigned i,j;int **at;
at=new int *[m]; // ahora las filas es m
for(i=0;i<m;i++)
//Incorrecto, estás inicializando para una sóla columna
// at[i]=new int(n); // y las columnas es n
//Correcto
at[i]=new int[n]; // y las columnas es n
for(i=0;i<n;i++){
for(j=0;j<m;j++)
at[j][i]=a[i][j];
}
return at;
}
Saludos.