[C] Explicación de cómo hacer arreglos multidimensionales dinámicos

Iniciado por eenube, 15 Marzo 2016, 01:31 AM

0 Miembros y 1 Visitante están viendo este tema.

eenube

Hola a todos. He escrito este pequeño ejemplo de cómo escribir arreglos dinámicos con varias dimensiones. Espero les sirva.

#include <stdlib.h>
#define FREE(p)   do { free(p); (p) = NULL; } while(0)

int **alloc_array(int, int);
void free_array(int **, int);

int **alloc_array(int x_size, int y_size)
{
   int i;
   int **array;
   array = malloc(x_size * sizeof(int *));
   if(array == NULL)
   {
return NULL;
   }
   for(i = 0; i < x_size; i++)
   {
       array[i] = malloc(y_size * sizeof(int));
       if(array[i] == NULL)
       {
           return NULL;
       }
   }
   return array;
}

void free_array(int **array, int x_size)
{
   int i;
   for(i = 0; i < x_size; i++)
      FREE(array[i]);
   FREE(array);
}


http://eenube.com/index.php/ldp/c/18-arreglos-dinamicos-multidimensionales-en-c

MOD EDIT: Usar etiquetas GeSHi.
Mi blog de programación, software libre, matemáticas y diseño gráfico libre. Espero les guste.
http://eenube.com

MAFUS

Está bien, pero debes retocar una cosa:
Cuando vas a inicializar las columnas, y, y una de estas inicializaciones falla retornas NULL y regresas, pero esto te crea pérdida de memoria: todos los punteros anteriormente inicializados desaparecerán al salir de la función, pero su memoria seguirá adquirida.

P.ej.: Si la última inicialización de y falla pedrerás la memoria del array principal, x, y de cada una de las ys, menos la última que ha fallado.