J'ai un programme qui appelle une fonction avec des arguments non définis, comme ceci :
#include
... /* code */
int main () {
GArray *garray = g_array_new (FALSE, FALSE, sizeof (char *));
/* le code ci-dessus initialise la GArray, et indique que la garray attend un pointeur vers char. */
function_name (garray, "arg2", "arg3" /* et ainsi de suite ... */);
... /* code */
}
notez que, les args entre " " sont des chaînes de caractères, donc, dans la function_name :
static void function_name (GArray *garray, ...) {
... /* code */
char *data;
data = va_arg (garray, gchar *);
g_array_append_val (garray, data);
... /* code */
}
Donc, si data pointe vers un argument dans va_list, lorsque la fonction retourne, théoriquement le data pointé, devient invalide, et donc dans garray aussi.
(causant une référence pendante, car le pointeur data pointe vers une adresse mémoire non réservée).
mais cela ne semble pas se produire, le programme s'exécute bien. pourquoi ? et, en C, les arguments passés aux fonctions sont stockés dans la pile, donc, data pointe-t-il vers la vie en pile en effet mémoire?
merci beaucoup.