我有一个程序调用带有未定义参数的函数,如下所示:
#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 */
}
请注意,“”之间的 args 是字符串,因此,在 function_name 中:
static void function_name (GArray *garray, ...) {
... /* code */
char *data;
data = va_arg (garray, gchar *);
g_array_append_val (garray, data);
... /* code */
}
因此,如果 data 指向 va_list 中的参数,则当函数返回时,从理论上讲,指向的数据将变为无效,并且在 garray 中也是如此。
(导致悬空引用,因为数据指针指向未保留更多的内存地址)。
但它似乎没有发生,程序运行良好。为什么?并且,在 C 中,传递给函数的参数存储在堆栈中,那么,堆栈中的数据点确实是内存吗?
非常感谢。