我有打電話與不確定參數的函數,這樣的程序: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