返回函数中分配的内存的地址

时间:2010-01-11 05:43:35

标签: c memory function

在函数中分配内存时,是否不可能通过返回其地址来使用函数外部的内存?

有例外吗?以下似乎是这样一个“例子”:

const char * f() {  
  return "HELLO";  
}

如何解释?

谢谢!

3 个答案:

答案 0 :(得分:3)

字符串文字是静态分配的,因此返回像“HELLO”这样的字符串文字的地址是安全的,并且它可以在函数外部使用而没有任何问题。

答案 1 :(得分:3)

为什么你认为这是不可能的?听起来你会把它与不将 local 变量的地址返回给调用函数的规则混淆。您不能这样做,因为函数本地的变量仅在该函数调用的持续时间内具有生命周期;一旦函数返回,那些变量就变成了垃圾。

有些事物的生命周期超出了函数调用的生命周期;可以将地址返回给他们。这些事情的例子是在堆上分配的内存块(例如,使用malloc),或者是具有静态存储持续时间的内容(例如全局变量和字符串文字)。

答案 2 :(得分:2)

“你好”是一个常数。它不会消失所以可以使用指针。一个局部变量是另一个故事......