Ваш вопрос не до конца понятен, но ...
Да, данная динамически распределенная структура (например, массив структур) сама может содержать указатели на распределенные данные (например, различные другие массивывыделенные структуры), и вы можете перераспределить различные части независимо.
Однако система не будет вызывать realloc()
для вас, пока вы перераспределяете одну из структур;вам придется отдельно программировать различные операции изменения размера.
Пример вложенных структур данных:
struct line { char *info; size_t length; };
struct section { size_t num_lines; struct line *lines; };
Вы можете выделить массив секций и перераспределить этот массив при необходимости.Каждый раздел содержит массив строк, и каждый из этих массивов строк также может быть независимо перераспределен.
Следовательно:
size_t num_sections = 0;
size_t max_sections = 0;
struct section *sections = 0;
if (num_sections == max_sections)
{
size_t new_max = (max_sections + 1) * 2;
struct section *new_sections;
if (sections == 0)
new_sections = malloc(new_max * sizeof(*new_sections));
else
new_sections = realloc(sections, new_max * sizeof(*new_sections));
if (new_sections == 0)
...out of memory error...
sections = new_sections;
max_sections = new_max;
}
struct section *section = §ions[num_sections++]; // Newly available section
section->num_lines = 0;
section->lines = 0;
return section;
(я предполагаю C99 - с переменнойобъявления, где я хочу их.)
Аналогичный процесс применяется для массива строк в разделе, за исключением того, что структура раздела не имеет отдельных значений для количества выделенных строк и количества фактически используемых строк,Каждая строка также имеет свою выделенную память для строки символов, конечно ...