如何在c中使用宏释放指针

2023-12-02

我想在 C 代码中编写宏来释放许多指针,如下所示:

FREE(ptr1, ptr2, ptr3, ptr4, ptrx);

对我来说,这比

 FREE(ptr1); 
 FREE(ptr2);
 FREE(ptr3);
 FREE(ptr4);
 FREE(ptrx);

提前致谢

问候,


使用具有可变数量函数参数的函数。标题:stdarg.h.

我对这个解决方案感到有点乐趣。

#define FREE( ... ) Free( &free_stop , __VA_ARGS__ , &free_stop )
//takes any number of pointer arguments,(at least one )( can also take NULL which is handled by free )

int free_stop ;

void Free( void* point , ... )  
{
    if( !point )
        return ;

    va_list list ;
    va_start( list , point ) ;

    void* p = va_arg( list , void* ) ;
    while( p != point ) 
    {
        free( p ) ;
        p = va_arg( list , void* ) ;
    }


    va_end( list ) ;

}

Usage:

FREE( ptr1 , ptr2 , ptr3 ) ;   //don't have to NULL terminate
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在c中使用宏释放指针 的相关文章

  • 如何检查图像对象与资源中的图像对象是否相同?

    所以我试图创建一个简单的程序 只需在单击图片框中更改图片即可 我目前只使用两张图片 所以我的图片框单击事件函数的代码 看起来像这样 private void pictureBox1 Click object sender EventArgs
  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • 将数组向左或向右旋转一定数量的位置,复杂度为 o(n)

    我想编写一个程序 根据用户的输入 正 gt 负 include
  • UML类图:抽象方法和属性是这样写的吗?

    当我第一次为一个小型 C 项目创建 uml 类图时 我在属性方面遇到了一些麻烦 最后我只是将属性添加为变量 lt
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • .split() 在 IE8 中无法按预期工作

    我使用以下方法从变量中包含的 URL 中提取变量 它在现代浏览器中工作正常 但在 IE8 中 它在第一个变量上失败 但在第二个变量上成功 var p http sagensundesign com height 400 width 300
  • R:“乘以”数据框的字符串列

    不知道这个操作叫什么 谷歌也没有帮助 假设我有两个像这样的简单数据框 df1 lt data frame factor1 c a b c df2 lt data frame factor2 c x y z gt df1 factor1 1
  • 使用 javax.faces.STATE_SAVING_METHOD 在客户端保存会话的含义

    我的第一个 JSF 页面抛出异常javax faces application ViewExpiredException 当我搜索时 我得到了解决我的问题的解决方案
  • R 将上个月的值添加为列

    我有一个数据表 其中包含按月列出的日期和价格 set seed 128 dat lt data table DATE c 2014 01 01 2014 02 01 2014 03 01 2014 04 01 2014 05 01 2014
  • 如何在 x86 汇编中移动两个浮点相乘的结果?

    我目前正在尝试将两个浮点数相乘 其中一个来自浮点向量 存储在 ebx 中的地址 并与我存储在 ecx 中的值相乘 我已经确认输入值是正确的 但是 例如 如果我将 32 乘以 1 则 EAX 中的值将更改为 00000000 而 EDX 中的
  • Visual Studio 和 DPI 问题

    我正在 Windows Vista 上使用 VS2008 开发 Windows 窗体应用程序 前几天我尝试在 Windows XP 上运行我的应用程序 GUI 上的所有内容都一团糟 我意识到我在 Windows Vista 上使用 120
  • 如何获取CloudKit的实际配额?

    我使用 Cloudkit 和私有数据库将一些文件存储到 iCloud 并在 iOS 和 OSX 之间同步 现在我想实现一些功能 用户可以在不离开应用程序并查看首选项的情况下查看 iCloud 中剩余的空间 但我找不到任何有关如何获取这些数据
  • Hibernate 多对多,没有第三个表

    我有两个表 Users 和 UserRole create table Users UserId serial not null UserName varchar 100 not null UserType varchar 15 not n
  • Android 和 JFileChooser

    我开发了一个桌面应用程序 允许用户从手机中提取图像 当我第一次开始这个项目时 我的 Android 正在运行 Gingerbread 当我通过 USB 将手机插入笔记本电脑时 它会显示为 具有可移动存储的设备 因此 JFileChooser
  • Excel 宏,在运行时插入国际有效的公式

    我有一个带有宏的 Excel 电子表格 可以插入条件格式 如下所示 Selection FormatConditions Add Type xlExpression Formula1 UND A3 lastName B3 firstName
  • Delphi 汇编函数返回长字符串

    我正在尝试学习 Delphi 中的内联汇编编程 为此我发现本文非常有帮助 现在我希望编写一个返回长字符串的汇编函数 特别是AnsiString 为了简单起见 我已经写了 function myfunc AnsiString asm eax
  • 如何使用过滤分支更改多个提交的提交作者?

    我正在使用在这里找到的这个脚本link编辑所有提交的作者信息 bin sh git filter branch env filter OLD EMAIL email protected CORRECT NAME Your Correct N
  • Webpack babel 6 ES6 装饰器

    我有一个用 ES6 编写的项目 使用 webpack 作为我的打包器 大多数转译工作正常 但是当我尝试在任何地方包含装饰器时 我收到此错误 Decorators are not supported yet in 6 x pending pr
  • 当人们说 css 中没有父选择器时,他们是什么意思?

    例如 假设我有一个如下所示的 HTML 我没有选择父元素 ul 吗 ul margin 50px ul test li hello li how are u 为了理解它们的含义 您需要理解什么选择意味着在CSS parent简单 By se
  • apache beam 2.7.0 在 utf-8 编码法语字符中崩溃

    我正在尝试将 csv 从 google 云平台的存储桶写入数据存储区 其中包含法语字符 口音但我有一条有关解码的错误消息 尝试从 进行编码和解码后latin 1 to utf 8 没有成功 使用unicode unicodedata 和编解
  • php从mysql输出到html表

    目前我正在开发一个网站正常运行时间搜索引擎 但是我遇到了一个愚蠢的问题 我想在表中输出多个 mysql 行 但是下面的代码会导致为找到的每一行创建一个单独的表 预先感谢您的帮助 searchTerm trim GET searchterm
  • Microsoft Graph SDK - 登录

    使用 MS Graph 是否可以只登录一次 目前 每当我调用 graphServiceClient 时 它都会要求我登录或选择登录的用户 有什么方法可以避免选择登录用户的过程吗 提前致谢 目前 这就是我初始化 graphService 的方
  • FQL 错误 102 需要用户会话进行重复查询

    我有一个功能齐全的 FQL 查询 但是当第二次触发它时 我收到错误代码 102 需要用户会话 在我的应用程序上 我有一个自动完成朋友搜索功能 我正在使用 jquery ui 自动完成功能和使用 AJAX 的动态源 这是我的 PHP 函数 f
  • 如何使用apache pig在hadoop集群上加载文件?

    我有一个pig脚本 需要从本地hadoop集群加载文件 我可以使用 hadoop 命令列出文件 hadoop fs ls repo mydata 但是当我尝试在 Pig 脚本中加载文件时 它失败了 加载语句是这样的 in LOAD repo
  • 如何在c中使用宏释放指针

    我想在 C 代码中编写宏来释放许多指针 如下所示 FREE ptr1 ptr2 ptr3 ptr4 ptrx 对我来说 这比 FREE ptr1 FREE ptr2 FREE ptr3 FREE ptr4 FREE ptrx 提前致谢 问候