У меня есть программа, которая вызывает функцию с неопределенными аргументами, например:
#include <stdargs.h><br/>
... /* code */
int main () { <br/>
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. */<br/>
function_name (garray, "arg2", "arg3" /* and so on ... */);<br/>
... /* code */
}
обратите внимание, что аргументы между "" являются строками, поэтому в имени_функции:
static void function_name (GArray *garray, ...) {
... /* code */
char *data;<br />
data = va_arg (garray, gchar *);
g_array_append_val (garray, data);<br />
... /* code */
}
Таким образом, если данные указывают на аргумент в va_list, когда функция возвращает, теоретически данные указывают, становятся недействительными, и также в массиве.
(вызывая висячую ссылку, потому что указатель данных указывает на адрес памяти, не зарезервированный больше).
Но этого не происходит, программа работает хорошо. Зачем? и, в C, аргументы, переданные функциям, хранятся в стеке, так что жизнь точек данных в стеке действительно памяти?
Thnkx много.