我有打电话与不确定参数的函数,这样的程序:C /油嘴内存管理{没有悬挂参考> WHYY ??!}
#include <stdargs.h>
... /* code */
int main() {
GArray *garray = g_array_new (FALSE, FALSE, sizeof (char *));
/* the code above initialize the GArray, and say that the garray expect a pointer to char. */
function_name (garray, "arg2", "arg3" /* and so on ... */);
... /* code */
}
需要注意的是,在“”之间的ARG游戏串,因此,在功能_名称:
static void function_name (GArray *garray, ...) {
... /* code */
char *data;
data = va_arg (garray, gchar *);
g_array_append_val (garray, data);
... /* code */
}
所以,如果数据指向的va_list一个说法,当函数返回时,teorically数据指出,转向失效,并在garray了。
(导致一个悬挂引用,因为数据指针,指向一个内存地址不保留更多)。
但它似乎没有发生,程序运行良好。为什么?并且,在C中,传递给函数的参数被存储在堆栈中,那么,数据是否在堆栈中确实存在内存?
thnkx很多。
错误 - 这些字符串常量具有静态存储持续时间,所以它们不太可能存储在堆栈中。指向他们的指针可能是,但这不是问题。 – caf 2009-08-05 05:03:00
当然,他们是常数。我的错。 – 2009-08-05 05:20:13