char * val;
val = getenv("ENV_VAR_NAME");
以上是获取环境变量的代码,如果我不释放 getenv(char*) 返回的内存,会导致内存泄漏吗?如果不是,请回答为什么?
不,你不应该。标准 7.20.4.5 说:
getenv 函数返回一个指向与匹配列表成员关联的字符串的指针。指向的字符串不应被程序修改,但可能会被后续调用 getenv 函数覆盖。
我相信粗体字涵盖了删除。
你不应该释放它。这是手册页的一个片段:
正如通常实现的那样,getenv() 返回一个指向环境列表中的字符串的指针。调用者必须注意不要修改这个字符串,因为那会改变进程的环境。
不要碰它!
不,您无法控制其存储。通常,它是一个指向多次重用的静态数组的指针。出于这个原因,如果您打算存储它以供以后使用,您应该复制它(您应该确保正确释放此副本)。
除非文档明确说明您可以释放指针,否则您不应该这样做。
你不应该删除它。Getenv 只是从包含每个环境变量的 char* 数组(char** environ,如果我没记错的话)中获取一个值。删除它们会导致未定义的行为。
可能最好的原因是标准没有说你可以。仅仅因为一个函数返回一个指针并不意味着该指针是有效的传递给free
. 除非函数的文档明确说明该函数“好像通过调用malloc
”来分配内存并返回指向该内存的指针,否则您必须假设该指针无效传递给realloc
or free
。