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