list->data[list->nused] = malloc(strlen(lines) + 1);
list->data
имеет тип record *
, но вы обращаетесь к нему (с [list-nused]
), так что тип list->data[list->nused]
равен record
, и вы назначаете указатель на него.Чтобы это работало, элемент структуры data
в record_list
должен быть указателем на указатель.
Кроме того, вы хотите выделить память для строки (так как вы выделяете strlen(lines) + 1
байт),Но у вас нет никакой переменной для хранения строки: record
имеет int, float и два символьных массива, которые имеют фиксированный размер.
Что вам, вероятно, нужно, это что-то вроде этого:
typedef struct {
int id;
char *name;
float score;
} record;
...
temp = realloc(list->data, list->nalloc * sizeof(record));
...
list->data[list->nused].name = malloc(strlen(lines) + 1);
strcpy(list->data[list->nused++].name, lines);
...
free(list->data[i].name);
Таким образом, вы выделяете запись (int, char-указатель, float), а там, где указатель char, вы выделяете память для строки.