char * val;
val = getenv("ENV_VAR_NAME");
上面是获取环境变量的代码,如果我不释放getenv(char *)返回的内存,它会导致内存泄漏吗?如果没有那么请回答原因?
答案 0 :(得分:36)
不,你不应该。标准7.20.4.5说:
getenv函数返回一个指针 到与...相关的字符串 匹配清单成员。 字符串 指向不得修改 程序,但可能会被覆盖 随后打电话给getenv 功能
我认为删除内容以粗体显示。
答案 1 :(得分:8)
你不应该释放它。这是手册页中的一个片段:
通常实现时,getenv()返回指向环境列表中字符串的指针。来电者必须注意不要 修改此字符串,因为这会改变进程的环境。
请勿触摸它!
答案 2 :(得分:8)
没有。您无法控制其存储空间。通常,它是指向多次重用的静态数组的指针。出于这个原因,如果您计划将其存储以供以后使用,应复制它(您应确保正确释放此副本)。
除非文档明确说明你可以释放指针,否则你不应该。
答案 3 :(得分:4)
你不应该删除它。 Getenv只从char *数组中获取一个值(char ** environ,如果我没记错的话),它包含每个环境变量。删除它们会导致未定义的行为。
答案 4 :(得分:2)
可能最好的理由是标准没有说你可以。仅仅因为函数返回指针并不意味着指针有效传递给free
。除非函数的文档特别指出函数分配内存“好像通过调用malloc
”并返回指向该内存的指针,否则必须假定指针无效传递给realloc
或{ {1}}。