asignación de memoria para la matriz de punteros

Necesito asignar memoria para un puntero que se debe usar como una matriz 2d. Sé cómo asignar memoria para punteros de caracteres e int punteros. Estoy confundido sobre cómo se asigna la memoria de una matriz de punteros. Una representación gráfica de la razón sería Ser muy útil, también es el código de abajo bien?

char *names[5]; for(i=0;i<5;i++) { names[i]=(*char)malloc(sizeof(char)); } 

No, esto no se debe a que está asignando la matriz asumiendo una dimensión de solo 1 elemento de tipo primitivo char (que es 1 byte).

Supongo que desea asignar 5 punteros a cadenas dentro de los names , pero solo punteros.

Debe asignarlo de acuerdo con el tamaño del puntero multiplicado por el número de elementos:

 char **names = malloc(sizeof(char*)*5); 

No es necesario asignarlos uno por uno con un bucle. Tenga en cuenta que debe especificar que es un puntero de punteros utilizando **

Lo que estás haciendo es asignar espacio para 5 caracteres. Podrías escribir esto y tendrá el mismo resultado:

 char *names = (char *)malloc(sizeof(char) * 5); 

Si quieres tener una serie de punteros, creo que este sería el mejor código

 char **names = (char **)malloc(sizeof(char *) * 5); 

No soy un super-codificador, pero como lo que soy ahora, esta es la solución correcta.

Además, en resumen, puede hacer lo siguiente también en este caso para asignar almacenamiento para cinco caracteres

names = (char*)malloc(5 * sizeof(char))

Enfatizando lo que Jack dijo al final: su código funciona solo si la matriz se declara como puntero de puntero mediante el uso de **.

Cuando la matriz se declara como

 char *names[5]; 

Supongo que la forma correcta de asignar memoria es casi como lo hizo Ak1to, pero multiplicando por el tamaño deseado de la cadena de caracteres:

 char *names[5]; for(i=0;i<5;i++) { names[i]=(char *)malloc(sizeof(char)*80); } 

de lo contrario, el comstackdor arroja un error sobre tipos incompatibles.