Я пытаюсь прочитать структурированные данные из текстового файла и сохранить их в структуре.Поскольку я не знаю, сколько записей будет в этом файле, я должен динамически увеличивать массив структур.Я попытался сделать это с realloc , как показано в следующем примере кода:
#define BUFFER 200
#define ENTRY_MAX 10 // default number of entries
typedef struct data_storage {
// store data in this struct
}data_storage;
int main() {
FILE *fp;
data_storage *data;
char arr[10*BUFFER];
char *token; // some data
const char s[2] = ";"; // this is the data separator in txt file
char *token_array[ENTRY_MAX];
int i = 0; // iterator
int number_of_entries = 1; // starts with at least one entry
fp = fopen("sample_file.txt", "r");
if(fp == NULL) {
printf("Impossible to open file \n");
return 1;
}
fgets(arr, 1000, fp); // gets a chunk of data from file
token = strtok(arr, s);
data = malloc(number_of_entries*sizeof(data_storage));
while( token != NULL) {
token = strtok(NULL, s);
token_array[i] = token;
i++;
if(i >= ENTRY_MAX){
/*
DO STUFF: uses strcpy to copy entries from token_array to data
*/
number_of_entries++; // increments number of entries
data = realloc(data, number_of_entries*sizeof(data_storage));
i = 0; // proceeds to read next entry
}
}
fclose(fp);
return 0;
}
В основном я пытаюсь использовать strtok
для чтения количества полей по умолчанию,и когда число токенов достигает ENTRY_MAX, я знаю, что прочитал всю запись и могу выделить память для еще одной структуры.
Но я получаю ошибку realloc(): invalid next size:
, которая выглядит как повреждение кучи.