在 C 中,你可以在 realloc 中拥有 realloc 吗?例如,当您需要同时 malloc 和重新分配它们时,结构内的结构。如果是,有人可以提供一个简单的例子吗?先感谢您。
问问题
795 次
1 回答
6
你的问题不是很清楚,但是......
是的,给定的动态分配结构(例如,结构数组)本身可以包含指向已分配数据的指针(例如各种其他已分配结构数组),并且您可以独立地重新分配各个部分。
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 - 在我想要的地方有变量声明。)
类似的过程适用于节内的行数组,除了节结构没有分配的行数和实际使用的行数的单独值。每行也有自己为字符串分配的内存,当然......
于 2010-11-15T05:14:13.617 回答