Ich habe ein Programm, das eine Funktion mit undefinierten Argumente nennen, wie folgt aus:C/Glib Memory Management {keine baumelnden Referenz> 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 */
}
zur Kenntnis, dass die args zwischen "" Strings in der Funktion _ Namen, so:
static void function_name (GArray *garray, ...) {
... /* code */
char *data;
data = va_arg (garray, gchar *);
g_array_append_val (garray, data);
... /* code */
}
also, wenn Datenpunkte auf ein Argument in va_list, wenn die Funktion Rückkehr, teorically die Daten darauf, schalten für ungültig erklärt werden, und in garray auch.
(verursacht eine freie Referenz, da der Datenzeiger auf eine Speicheradresse zeigt, die nicht mehr reserviert ist).
aber es scheint nicht zu passieren, das Programm läuft gut. Warum? und in C werden Argumente, die an Funktionen übergeben werden, im Stapel gespeichert, so dass die Datenpunkte tatsächlich im Speicher liegen.
thnkx viel.
Sie sagten 'Objekt mit statischer Speicherdauer ist erstellt', das wusste ich nicht, thnx caf, das erklärt meine Zweifel! D – drigoSkalWalker