Tengo una pequeña asignación en C. Intento crear una matriz de punteros a una estructura. Mi pregunta es ¿cómo puedo inicializar cada puntero a NULL? Además, después de asignar memoria a un miembro de la matriz, no puedo asignar valores a la estructura a la que apunta el elemento de la matriz.¿Cómo puedo declarar e inicializar una matriz de punteros a una estructura en C?
#include <stdio.h>
#include <stdlib.h>
typedef struct list_node list_node_t;
struct list_node
{
char *key;
int value;
list_node_t *next;
};
int main()
{
list_node_t *ptr = (list_node_t*) malloc(sizeof(list_node_t));
ptr->key = "Hello There";
ptr->value = 1;
ptr->next = NULL;
// Above works fine
// Below is erroneous
list_node_t **array[10] = {NULL};
*array[0] = (list_node_t*) malloc(sizeof(list_node_t));
array[0]->key = "Hello world!"; //request for member ‘key’ in something not a structure or union
array[0]->value = 22; //request for member ‘value’ in something not a structure or union
array[0]->next = NULL; //request for member ‘next’ in something not a structure or union
// Do something with the data at hand
// Deallocate memory using function free
return 0;
}
Esa es una buena respuesta, excepto que 'array' es ** not **" realmente un puntero a un puntero ". 'array' es realmente una matriz, no un puntero de ningún tipo. Los tipos de matriz cuando se usan en una expresión se evalúan como un puntero al primer elemento de la matriz, pero una matriz sigue siendo un tipo real, distinto de los punteros. 'sizeof array' debería ayudar a convencerlo de que' array' no es un puntero. – caf
en lugar de 'array [0] = (list_node_t *) malloc (sizeof (list_node_t));' debe ser 'array [0] = malloc (sizeof (list_node_t));' No encasquete las llamadas malloc. –