Como regresar una matriz en una funcion

shadow
30 de Noviembre del 2005
Mi duda es que tipo de dato tiene que ir en el encabezado de una funcion para poder obligar que la funcion regrese una matriz de 2 dimensiones. Tenia pensado utilizar:

int * * prueba(){
int m[2][2];
return m;
}

Pero me marca un error a la hora de regresar m. Que puedo hacer?

chuidiang
30 de Noviembre del 2005
Hola:

int[2][2] y int ** son tipos distintos, aunque representen más o menos lo mismo. Una forma es hacer esto

int ** prueba()
{
int **m;
m = new int * [2];
for (int i=0;i<2;i++)
m[i] = new int[2];
...
return m;
}

Luego, alguien tendrá fuera que liberar la memoria, haciendo lo mismo pero al revés, es decir, primero liberara los m[i] y luego m.

Aparte del error que te da, no es buena idea declarar el array local y luego devolverlo. Al ser el array local, cuando termine la función el array desaparece. Estarías devolviendo un puntero a una zona de memoria que ha sido liberarda y tendrías problemas más adelante.
Puedes echar un ojo en http://www.geocities.com/chuidiang/funciones/punteros.html para ver este tipo de errores típicos.

Si no te gusta lo de crear el array dentro y tener que liberarlo fuera, puedes pasar el array como parámetro y que la función simplemente te lo rellene con los datos que sea.

Se bueno.