realloc里面的realloc

在C中,你可以在realloc里面重新分配吗? 例如,当你需要对它们两者进行malloc并重新分配它们时,结构中的结构。 如果是,有人可以提供一个简单的例子吗? 先感谢您。

你的问题不是很清楚,但……

是的,给定的动态分配结构(例如,结构数组)本身可以包含指向已分配数据的指针(例如分配结构的各种其他数组),您可以单独重新分配各个部分。

但是,当您重新分配其中一个结构时,系统不会为您调用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 = &sections[num_sections++]; // Newly available section section->num_lines = 0; section->lines = 0; return section; 

(我假设C99 – 我想要它们的变量声明。)

类似的过程适用于节中的行数组,除了节结构没有分配的行数和实际使用的行数的单独值。 每行也有自己为字符串分配的内存,当然……