你的问题不是很清楚,但......
是的,给定的动态分配结构(例如,结构数组)本身可以包含指向已分配数据的指针(例如分配结构的各种其他数组),并且您可以独立地重新分配各个部分.
但是,realloc()当您重新分配其中一个结构时,系统不会呼叫您; 你必须分别编程各种大小调整操作.
示例嵌套数据结构:
struct line { char *info; size_t length; };
struct section { size_t num_lines; struct line *lines; };
Run Code Online (Sandbox Code Playgroud)
您可以分配一个部分数组,并在需要时重新分配该数组.每个部分都包含一个行数组,每个行数组也可以独立重新分配.
因此:
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;
Run Code Online (Sandbox Code Playgroud)
(我假设C99 - 我想要它们的变量声明.)
类似的过程适用于节中的行数组,除了节结构没有分配的行数和实际使用的行数的单独值.每行也有自己为字符串分配的内存,当然......