Прежде всего, мое извинение за то, что код, который я выкладываю ниже, немного неоднозначно, так как я должен упростить его так, чтобы читатели могли его понять (оригинальный код довольно сложен).
В коде ниже:
- Есть список из 10 предметов.
- Каждый элемент имеет список информации о нем.
- У каждой информации есть список имен.
Итак, я пытаюсь заполнить список элементов, но мне не удалось перераспределить память в строке, которую я пометил «<<<<
». Нет ошибки компиляции, но когда я распечатываю имена всех элементов, они не распечатываются. Я провел некоторую отладку, и я почти уверен, что строка "<<<<
" вызывает ошибку, но я не знаю, почему.
typedef struct {
char *name;
} NAME;
typedef struct {
int id;
int nNames;
NAME *names;
} INFO;
typedef struct {
INFO *info;
} ITEM;
void *buildListInfo(LIST *list) {
if (list != NULL) {
list->nNames++;
list->names = realloc(list->names, sizeof(INFO) * list->nNames++); // <<<<
list->names[list->nNames-1].name = "example"; // index 0 first
}
return list;
}
int main() {
int itemSize = 10;
ITEM *items = malloc(sizeof(ITEM)*itemSize);
for (int i = 0; i < ind->nTerms; i++) {
items[i].info = malloc(sizeof(INFO));
}
/* construct an array that holds the number of lists that an item has */
int num[itemSize];
for (int i = 0; i < itemSize; i++) {
num[i] = 0;
}
/* build all items, each item has a list that contains its info (many) */
while (<some_finite_condition>)
for (int i = 0; i < itemSize; i++) {
items[i].info[num[i]] = *buildList(&(items[i].info[list[i]]));
num[i]++;
}
}
}