我正在尝试从txt文件读取结构化数据并将其存储到结构中。由于我不知道该文件将包含多少个条目,因此我必须动态增长一个结构数组。根据以下代码示例,我尝试使用 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:
错误,看起来像堆损坏。
答案 0 :(得分:0)
根据realloc
的文档,如果失败,则返回NULL
。结果,data = realloc(data,...)
会在函数失败时导致指针损坏。这可能会导致在发布的代码中提出各种问题