Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: eenube en 15 Marzo 2016, 01:31 am



Título: [C] Explicación de cómo hacer arreglos multidimensionales dinámicos
Publicado por: eenube en 15 Marzo 2016, 01:31 am
Hola a todos. He escrito este pequeño ejemplo de cómo escribir arreglos dinámicos con varias dimensiones. Espero les sirva.

Código
  1. #include <stdlib.h>
  2. #define FREE(p)   do { free(p); (p) = NULL; } while(0)
  3.  
  4. int **alloc_array(int, int);
  5. void free_array(int **, int);
  6.  
  7. int **alloc_array(int x_size, int y_size)
  8. {
  9.   int i;
  10.   int **array;
  11.   array = malloc(x_size * sizeof(int *));
  12.   if(array == NULL)
  13.   {
  14. return NULL;
  15.   }
  16.   for(i = 0; i < x_size; i++)
  17.   {
  18.       array[i] = malloc(y_size * sizeof(int));
  19.       if(array[i] == NULL)
  20.       {
  21.           return NULL;
  22.       }
  23.   }
  24.   return array;
  25. }
  26.  
  27. void free_array(int **array, int x_size)
  28. {
  29.   int i;
  30.   for(i = 0; i < x_size; i++)
  31.      FREE(array[i]);
  32.   FREE(array);
  33. }

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

MOD EDIT: Usar etiquetas GeSHi.


Título: Re: [C] Explicación de cómo hacer arreglos multidimensionales dinámicos
Publicado por: MAFUS en 15 Marzo 2016, 18:41 pm
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.