免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2229 | 回复: 9
打印 上一主题 下一主题

[C] 关于getenc() [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-12 17:18 |只看该作者 |倒序浏览
char *p = getenv("RUNPATH";
这个函数执行以后,需要自己调用free来释放指针P所占用的内存吗?

论坛徽章:
0
2 [报告]
发表于 2008-12-12 17:34 |只看该作者
应该不用
我尝试去free
但是程序报错
希望高手告诉我原因

论坛徽章:
0
3 [报告]
发表于 2008-12-12 17:36 |只看该作者
如果不是使用者主动释放
这片内存该由谁释放?

论坛徽章:
0
4 [报告]
发表于 2008-12-12 17:41 |只看该作者
getenv 指向的内存是在进程建立是就存在的 ,指向环境变量列表的全局指针是char **environ

评分

参与人数 1可用积分 +5 信誉积分 +2 收起 理由
samon_fu + 5 + 2 内容准确,答复有力!

查看全部评分

论坛徽章:
0
5 [报告]
发表于 2008-12-12 17:42 |只看该作者
setenv里面用到的__environ是glibc的全局变量 虽然他使用malloc分配,我们应该没必要管。
另外你调free应该就会内存错误,因为返回的指针只是指向malloc分配的内存的‘=’后的位置。

[ 本帖最后由 zhoubug 于 2008-12-12 17:47 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-12-12 17:45 |只看该作者
getenv返回的指针是环境变量列表,其在程序运行时,由系统申请
因此getenv只需要指针指过去就行了
既然系统申请,当然是系统释放,并不是你申请的。

论坛徽章:
0
7 [报告]
发表于 2008-12-12 18:42 |只看该作者
部分库函数是直接返回static或全局数据

不需要程序员手动释放该内存

评分

参与人数 1可用积分 +5 信誉积分 +2 收起 理由
samon_fu + 5 + 2 我很赞同

查看全部评分

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
8 [报告]
发表于 2008-12-12 21:20 |只看该作者
返回的应该是位于静态内存区域,你不用考虑free。

论坛徽章:
0
9 [报告]
发表于 2008-12-13 00:25 |只看该作者
谢谢楼上的各位

论坛徽章:
0
10 [报告]
发表于 2008-12-13 01:28 |只看该作者
手册中有这么一句

  1. NOTES
  2.        The strings in the environment list are of the form name=value.

  3.        As typically implemented, getenv() returns a pointer to a string within the environment list.  The caller must take care
  4.        not to modify this string, since that would change the environment of the process.

  5.        The  implementation  of getenv() is not required to be reentrant.  The string pointed to by the return value of getenv()
  6.        may be statically allocated, and can be modified by a subsequent call to getenv(), putenv(3), setenv(3), or unsetenv(3).

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP