la matriz de char creada de la s dos formas, pero me dijeron que esta mal la forma dinamica no se hace asi como esta escrito. se hace con malloc pero no asi coom lo expuce.
Lo primero: en C puedes almacenar el valor de retorno de malloc y para el caso cualquier función que retorne un "void *" en cualquier variable de tipo "puntero a objeto".
Primero debes reservar memoria para el bloque principal que almacenara las direcciones de cada fila. A continuación debes reservar el bloque para cada una de las filas y cuyo tamaño es igual al numero de columnas por el tamaño del objeto almacenado.
Siguiendo el ejemplo que publicas la versión correcta es:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int **mat;
int filas = 5;
int columnas = 30;
int i;
/* Reserva del bloque principal */
mat
= malloc(filas
* sizeof *mat
);
/* Reserva de la memoria para cada fila */
for (i = 0; i < filas; i++)
mat
[i
] = malloc(columnas
* sizeof *mat
[i
]);
/* ... Algun proceso ... */
/* Liberamos la memoria de cada fila */
for (i = 0; i < filas; i++)
/* Liberamos el bloque principal */
return EXIT_SUCCESS;
}
Un saludo