C语言,指针传递给客户端的释放问题

zhangwuji154 2013-05-19 11:07:11
需求是,比如做一个通用的遍历一个文件夹的函数库(C++里做过一个这样的类,现在要改成C语言版本)
遍历到每个文件的时候,只负责提取出文件信息,对每个文件的处理,是由客户端传递的函数指针处理的。

typedef int (*PROCESS)(const fileinfo* fi);

int Traverse(const char* folder, PROCESS p)
{
while(findnext())
{
fileinfo fi = getinfo(...);
p(&fi);
}
}


如果fileinfo fi是个局部变量,传递进PROCESS 之后,如果客户端想存储这个指针,只好再复制一遍fileinfo这个变量。如果是fileinfo这里生成的时候就是指针,就需要在客户端决定什么时候释放这个指针。原来C++版本是用shared_ptr做的,智能指针,自动释放。

C语言要怎么做啊?
...全文
168 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mujiok2003 2013-05-19
  • 打赏
  • 举报
回复

typedef int (*PROCESS)(const fileinfo* fi);
说明用户只能读*fi,不能修改*fi,自然不能释放。 当然用户可以保留副本fileinfo copy = *fi;
zhangwuji154 2013-05-19
  • 打赏
  • 举报
回复
引用 5 楼 derekrose 的回复:
c语言释放是用free 在while最后面free不行吗? 还有那个getinfo是怎么实现的
getinfo是个伪代码。 PROCESS 是个函数指针,这个函数想怎么定义怎么定义,我 while 之后 free了,那如果人家 PROCESS 里写的是把这些指针存起来,存到一个数组里,跟 PROCESS 同一级别的函数再用这个数组,就出错了。
derekrose 2013-05-19
  • 打赏
  • 举报
回复
c语言释放是用free 在while最后面free不行吗? 还有那个getinfo是怎么实现的
vuqrzk5w 2013-05-19
  • 打赏
  • 举报
回复
遍历文件库里加一个Free函数,之前记录有多少个fileinfo指针生成,在客户用过之后要求调用这个Free函数
14号选手 2013-05-19
  • 打赏
  • 举报
回复
引用 2 楼 zhangwuji154 的回复:
引用 1 楼 xuchao1229 的回复:
p到底是一个形参还是一个函数名?
函数指针啊
恩,利用这个函数传回去一个指针,是哪里出问题了???是不是getinfo传回来的指针类型不一样?
zhangwuji154 2013-05-19
  • 打赏
  • 举报
回复
引用 1 楼 xuchao1229 的回复:
p到底是一个形参还是一个函数名?
函数指针啊
14号选手 2013-05-19
  • 打赏
  • 举报
回复
p到底是一个形参还是一个函数名?

70,040

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧