[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.html>


Más información sobre la lista de distribución Cconclase