Lobishomen, página personal

Otra Forma de Declarar Matrices con Memoria Dinámica en C++

Publicado por lobishomen en abril 1, 2011

Pues creo que todos están bastante familiarizados con la clásica manera de pedir memoria para matrices en C++ que a todos nos enseñan en nuestros cursos elementales de programación:

int** matriz;
....
matriz=new int*[n];
for(i=0;i<n;i++){
         matriz[i]=new int[n];
}

No sé si todos estén de acuerdo conmigo de que esta manera de declarar matrices es horrible, es tedioso liberar la memoria a parte de que hay que pedir memoria muchas veces(pedir memoria casi seguro no es O(1), y es posible que se desperdicie memoria debido a que a veces por cuestiones de eficiencia el SO te reserva mas memoria de la que pides, multiplica ese pequeño excedente por n+1).

Tan tedioso llego a ser que a veces optaba por no usar matrices y en lugar de eso acceder a índices de arreglos unidimensionales con algo parecido a arreglo[i*n+k]. Pero hace poco se me ocurrió una alternativa, no es una idea brillante pero sirve para ilustrar que a veces pasamos por alto cosas tan sencillas simplemente por eso: porque son sencillas.

matriz=new int*[n];
int *data=new int[n*n];
for(i=0;i<n;i++){
        matriz[i]=&data[i*n];
}

Como podemos observar, ahora sólo se está pidiendo memoria al SO dos veces. Y liberar la memoria ahora se tornó algo mucho mas simple:

delete [] matriz[0];
delete [] matriz;

Advertisement

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

 
Seguir

Get every new post delivered to your Inbox.