Asignación de matriz dinámica de estructura en C.

La asignación de la matriz dinámica de la estructura en C. Valgrind encontró este error: Uso del valor no inicializado del tamaño 8. El error aparece al intentar acceder al miembro de la estructura.

¿Cuál es la manera de evitar eso?

void find_rate() { int num_lines = 0; FILE * in; struct record ** data_array; double * distance; struct record user_record; in = open_file(); num_lines = count_lines(in); allocate_struct_array(data_array, num_lines); data_array[0]->community_name[0] = 'h'; // the error is here printf("%c\n", data_array[0]->community_name[0]); fclose(in); } FILE * open_file() { ..... some code to open file return f; } int count_lines(FILE * f) { .... counting lines in file return lines; } 

Esta es la forma en que asigno la matriz:

 void allocate_struct_array(struct record ** array, int length) { int i; array = malloc(length * sizeof(struct record *)); if (!array) { fprintf(stderr, "Could not allocate the array of struct record *\n"); exit(1); } for (i = 0; i < length; i++) { array[i] = malloc( sizeof(struct record) ); if (!array[i]) { fprintf(stderr, "Could not allocate array[%d]\n", i); exit(1); } } } 

Ya que estás pasando la dirección de la matriz a la función allocate_struct_array

Necesitas:

 *array = malloc(length * sizeof(struct record *)); 

Y en la función de llamada necesitas declarar data_array como:

 struct record * data_array; 

y pasar su dirección como:

 allocate_struct_array(&data_array, num_lines);