首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >realloc中的realloc

realloc中的realloc
EN

Stack Overflow用户
提问于 2010-11-15 13:09:30
回答 1查看 792关注 0票数 1

在C语言中,你可以在realloc中使用realloc吗?例如,当您需要malloc和realloc这两个结构时,在struct中使用struct。如果是,谁能提供一个简单的例子?提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-15 13:14:14

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

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

但是,当您重新分配其中一个结构时,系统不会为您调用realloc();您必须单独编写各种调整大小的操作。

示例嵌套数据结构:

代码语言:javascript
复制
struct line { char *info; size_t length; };

struct section { size_t num_lines; struct line *lines; };

您可以分配一个段数组,并在需要时重新分配该数组。每个部分包含一个行数组,并且这些行数组中的每一个也可以独立地重新分配。

因此:

代码语言:javascript
复制
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 -在我想要的地方使用变量声明。)

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4181568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档