realloc里面的realloc

Pau*_*ar. 1 c malloc struct realloc

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

Jon*_*ler 6

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

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

但是,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 = &sections[num_sections++];  // Newly available section
 section->num_lines = 0;
 section->lines = 0;
 return section;
Run Code Online (Sandbox Code Playgroud)

(我假设C99 - 我想要它们的变量声明.)

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