递归释放 C 结构体

2023-11-24

我有一个结构,仅包含指向我分配的内存的指针。有没有一种方法可以递归地释放每个作为指针的元素,而不是对每个元素调用 free ?

例如,假设我有这样的布局:

typedef struct { ... } vertex;
typedef struct { ... } normal;
typedef struct { ... } texture_coord;

typedef struct
{
    vertex* vertices;
    normal* normals;
    texture_coord* uv_coords;
    int* quads;
    int* triangles;
} model;

在我的代码中,我对每个结构进行 malloc 来创建模型:

model* mdl = malloc (...);
mdl->vertices = malloc (...);
mdl->normals = malloc (...);
mdl->uv_coords = malloc (...);
mdl->quads = malloc (...);
mdl->triangles = malloc (...);

释放每个指针很简单,如下所示:

free (mdl->vertices);
free (mdl->normals);
free (mdl->uv_coords);
free (mdl->quads);
free (mdl->triangles);
free (mdl);

有没有一种方法可以递归地迭代 mdl 中的指针,而不是在每个元素上调用 free ?

(在实践中,为每个函数编写 free() 几乎没有任何工作,但它会减少代码重复,并且对于学习很有用)


事实并非如此——尽管您可以编写一个方法来完成所有六次释放,这样您就不会错过任何一次。

void freeModel( model* md1 ) {
    free (mdl->vertices);
    free (mdl->normals);
    free (mdl->uv_coords);
    free (mdl->quads);
    free (mdl->triangles);
    free (mdl);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

递归释放 C 结构体 的相关文章

随机推荐

  • TfsConfigurationServer.GetService() 始终返回 null

    我尝试使用 TFS SDK 连接到 TFS 2010 但无法获取 VersionControlServer 服务 var servers RegisteredTfsConnections GetConfigurationServers ok
  • 如何测试镜像 API 订阅

    httpscallbackUrl 的限制以及订阅的整体性质使得这看起来只能通过可公开访问的 url 来完成 到目前为止 我已经遇到了两种潜在的解决方案 可以使本地开发 调试变得更容易 第一个是订阅代理谷歌提供的服务 此解决方法本质上允许您删
  • 在react中立即setState后无法获取新值

    我正在使用 Reactjs 如果输入不正确 我将在其中设置错误 示例代码是 handleChange function if shares this setState error shares if this state error sha
  • Git .netrc 文件身份验证问题

    我正在使用 GitHub 我创建了一个存储库并将其克隆到我的 Ubuntu 机器上 我已在 netrc文件如下 machine https github com xxx yyy git login xxx xxx 我希望 Git 在输入此条
  • 仅 WCFclient 操作 Async .Net core 2.0

    我将 asp net core 2 0 中的 wcf 服务端点添加到连接的服务中 然后尝试使用它 但对于客户端 只有以 async 结尾的函数 我不想使用 async 但是没有 async就没有功能 这是什么问题 我该怎么办 而不是使用那个
  • OneToMany 带注释的列表中的重复项

    我正在使用 JPA 2 Hibernate 4 2 6 开发一个 Java 项目 但我遇到了奇怪的行为 在我的模型中 我有两个相关的实体 Question and Answer Entity public class Question On
  • Angular 2 什么时候使用 DI、provider 还是纯导入?

    我有点困惑什么时候适合使用什么 1 用静态函数定义类 只需导入并使用导入的名称 然后使用函数 共享类 export class SomeClass static someFunction 使用导出类的类 import SomeClass f
  • 使用 PyMySQL 的 SELECT 结果列顺序错误

    我正在通过 python 在 MySQL 数据库上执行 SQL SELECT 查询 使用 PyMySQL 作为接口 以下是执行该任务的代码摘录 try with self connection cursor as cursor sql SE
  • 适用于 Iphone 的 ABBYY 移动 OCR 引擎 [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我希望为我的下一个 iPh
  • flutter - 应用程序栏在灵活空间中滚动并显示重叠内容

    我正在尝试使用 flutter 在灵活空间中重新创建应用程序栏滚动和重叠内容 该行为如下所示 http karthikraj net 2016 12 24 scrolling behavior for appbars in android
  • 下载 MacPorts 依赖项而不安装

    默认的 MacPorts 安装会下载每个依赖项 构建并安装它 然后下载 构建并安装下一个依赖项 依此类推 这意味着在整个安装过程中需要持续的网络连接 在我的配置中 持续的网络连接是不可行的 这意味着安装大依赖包可能需要很长时间 如何在开始时
  • 如何在列表框上实现增量搜索?

    我想对绑定到列表框的键值对列表实现增量搜索 如果我有三个值 AAB AAC AAD 那么用户应该能够在可用列表框中选择一个项目并键入 AAC 并且该项目应该突出显示并处于焦点位置 它也应该以增量方式进行 处理这个问题的最佳方法是什么 向 K
  • Grails Spring Core 安全插件 - 无法解析类

    我正在使用 Grails 2 2 2 并且已经通过在 BuildConfig groovy 文件中添加以下行来安装 spring security core 2 0 RC2 Under the plugins compile spring
  • jQuery 在带有 rowspan 的表中选择可视列

    我见过一些类似的问题 但没有回答这个具体问题 考虑下表 table border 1px tr td one td td two td td three td td four td td five td tr tr td two td td
  • 使用 RestSharp 发布数据时序列化对象

    我最近开始使用 RestSharp 来使用使用 XML 的 REST 服务 它使得将 XML 对象反序列化为自定义对象集合变得非常简单 但我的问题是最好的方法是什么重新序列化什么时候发回服务 我应该使用 LINQ to XML 重新序列化吗
  • 如何以编程方式将 mp3 转换为 itunes 可播放的 aac/m4a 文件?

    我一直在寻找一种以编程方式或通过命令行将 mp3 转换为 aac 的方法 但没有成功 理想情况下 我有一段代码可以从我的 Rails 应用程序中调用 将 mp3 转换为 aac 我安装了 ffmpeg 和 libfaac 并能够使用以下命令
  • 大O符号之和[重复]

    这个问题在这里已经有答案了 可能的重复 将不同的例程组合在一起时的大O 什么是O n O log n 减少到 我的猜测是O n 但无法给出严格的推理 我明白O n O 1 应该减少到O n since O 1 只是一个常数 好吧 自从O f
  • 使用 ClosedXML 将 Gridview 导出到 Excel,而不发出警告:您尝试打开的文件格式不同

    我正在开发 ASP NET 4 5 Webform 并且有一个 Gridview 具有自定义 TemplateField 并从 sqlDataSource 获取数据 我有这个事件将 gridview 内容导出到 Excel 工作表 它的工作
  • 如何从 C# 中的一组图像创建 H.264 编码的电影?

    我今天做了很多搜索 C 库 这将允许我创建 H 264 编码的视频文件 有谁知道是否存在这样的库或第三方组件 Use ffmpeg 我建议直接运行 ffmpeg 进程 如本示例所示 http jasonjano wordpress com
  • 递归释放 C 结构体

    我有一个结构 仅包含指向我分配的内存的指针 有没有一种方法可以递归地释放每个作为指针的元素 而不是对每个元素调用 free 例如 假设我有这样的布局 typedef struct vertex typedef struct normal t