1

在 C 中,你可以在 realloc 中拥有 realloc 吗?例如,当您需要同时 malloc 和重新分配它们时,结构内的结构。如果是,有人可以提供一个简单的例子吗?先感谢您。

4

1 回答 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 = &sections[num_sections++];  // Newly available section
 section->num_lines = 0;
 section->lines = 0;
 return section;

(我假设 C99 - 在我想要的地方有变量声明。)

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

于 2010-11-15T05:14:13.617 回答