[C con Clase] Devolver un array bidimensional
Carlos Segura
carlossegurag en gmail.com
Mar Jun 17 00:41:45 CEST 2008
Hola, primero decirque que la solución de pasar a getCuadricula un puntero
dónde debe almacenar la información me parece mucho más elegante. Sobre
resolverlo de la otra forma, un par de cosas:
1.- Debes darte cuenta que cuando defines un array local a un método, la
memoria se toma de la pila (en general) y no puedes devolver un puntero a
esa zona.
2.- Si quieres hacer la copia dentro de la propia clase, lo que puedes tener
es otro elemento en la clase int **mapa_auxiliar, y devolver ese. Sobre ese
habrás hecho un new, será memoria dinámica y no habría problemas.
Saludos,
Carlos
El día 16 de junio de 2008 20:58, Alejandro <alepelexo en yahoo.es> escribió:
> ¡Hola listeros! Mi caso es el siguiente. Tengo una clase como la que
> muestro a continuación:
>
> class Cuadricula
> {
> private:
> int w, h;//Dimensiones de la cuaricula (a lo ancho y a lo
> alto)
> int **mapa;//Mapa de la cuadrícula
> public:
> Cuadricula(int alto, int ancho);
> int **GetCuadricula();
>
> ...
>
> ~Cuadricula();
> };
>
> En el constructor, lo que hago es convertir "**mapa" en un array
> bidimensional de dimensiones "alto" y "ancho", mediante memoria dinámica, de
> la siguiente forma:
>
> int k, n;//Contadores
>
> mapa = new int*[h];
> for(k = 0; k < h; k++)
> {
> mapa[k] = new int[w];
> }
>
> Hasta ahí todo bien. Mi problema está en la función "GetCuadricula()". Como
> no quiero que se devuelva la dirección de memoria del mapa de la clase (para
> proteger los datos privados), los copio en un array bidimensional auxiliar:
>
> int k, n;
> int copy_mapa[h][w];
>
> for(k = 0; k < h; k++)
> {
> for(n = 0; n < w; n++)
> {
> copy_mapa[k][n] = mapa[k][n]
> }
> }
>
> Ahora la pregunta es: ¿cómo hago para que la función "GetCuadricula()"
> devuelva ese array? La idea es que luego me pueda referir a él desde
> "main()" de la siguiente manera:
>
> Cuadricula mapa(10, 20);
> int **mapa_colisiones;
> int k, n;
>
> ...
>
> mapa_colisiones = mapa.GetCuadricula();
>
> for(k = 0; k < 10; k++)
> {
> for(n = 0; n < 10; n++)
> {
> if(mapa_colisiones[k][n] != 0)
> {
> ...
> }
> }
> }
>
> ...
>
> Se me ocurrió pasar como parámetro a la función "GetCuadricula()" un array
> en el que se copiaría el mapa del objeto, pero ahora que se me planteó este
> problema me gustaría saber también la solución. Espero que me podáis ayudar.
>
> Un saludo, Alejandro.
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20080616/ba17585c/attachment-0001.html>
Más información sobre la lista de distribución Cconclase