在C语言中,你可以在realloc中使用realloc吗?例如,当您需要malloc和realloc这两个结构时,在struct中使用struct。如果是,谁能提供一个简单的例子?提前谢谢你。
发布于 2010-11-15 13:14:14
你的问题不是很清楚,但是...
是的,给定的动态分配结构(例如,结构数组)本身可以包含指向已分配数据的指针(例如,已分配结构的各种其他数组),并且您可以独立地重新分配各个部分。
但是,当您重新分配其中一个结构时,系统不会为您调用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 -在我想要的地方使用变量声明。)
类似的过程也适用于节中的行数组,只是节结构没有单独的值来表示分配的行数和实际使用的行数。当然,每一行也为字符串分配了自己的内存……
https://stackoverflow.com/questions/4181568
复制相似问题