arrays dinamicos bidimensionales en c??!

JoseCar
01 de Septiembre del 2005
Bueno estube buscando como utilizar los arrays dinamicos en c y no pude entender a la logica de algunos ejemplos..el uso de malloc en arrays sencillos es facil pero no puedo hacerlo con bidimensionales alguien me ayuda!??? por favor..y de antemano gracias

chuidiang
01 de Septiembre del 2005
Hola:

Es un poco liado hasta que se entiende, pero luego es sencillo.
Un array dinamico de dos dimensiones se puede pensar como un puntero a un array de punteros. Puedes declararlos asi

double **array;

Primero necesitas reservar sitio para el array de punteros. Imagina que quieres hacer una matriz de 10 filas y 20 columnas. Se puede hacer asi

array = (double **)malloc (10* sizeof(double *));

Ya tienes un array de 10 punteros a double. Cada uno de ellos apuntará a una fila de la matriz, así que tienes 10 filas.

Ahora, a cada uno de ellos debes reservar su espacio. Como cada fila tiene 20 numeros (20 columnas), para cada uno de ellos reservamos 20 doubles

for (i=0; i<20; i++)
array[i] = (double *)malloc (20*sizeof(double));

Ya está.

Para liberar debes hacer igual, pero al revés. Primero liberar cada una de las filas con free (array[i])) y luego el array de punteros, con free (array).

Se bueno.

Marcos
01 de Septiembre del 2005
En el ejemplo que ha puesto chuidiang, hay un error, el for es hasta 10 no hasta 20, porque lo que recorres son las filas para ir reservando memoria para las columnas. La cosa quedaria:

double **array;

array = (double **)malloc (10* sizeof(double *));

for (i=0; i<10; i++)
array[i] = (double *)malloc (20*sizeof(double));



Josec
01 de Septiembre del 2005
mira lo quiese adaptar para arrays de tipo char pero no me funciono..quiesera saber como lo puedo hacer para tipos char