2012-08-23 65 views
2

在我的應用我有結構:GTK +,gchar在結構似乎被釋放

struct 
{ 
    gchar *xen_srv_addr; 
    gchar *xen_srv_usr; 
    gchar *xen_srv_psw; 
    gchar *xen_srv_prt; 
} Xen_Server_Connection; 

我想給gchars分配一個值。我從文件中讀取它,用strtok解析並返回char *。 設置解析器尋找特定的標記和:

if(a==b) 
    { 
    Xen_Server_Connection.xen_srv_addr=Parm_Pars(pattern, 2); 
    ..... 
    } 

這種分配只適用這一點,如果塊中。 gchar在它之後變成了垃圾。但如果我:

if(a==b) 
    { 
    Xen_Server_Connection.xen_srv_addr="192.168.1.1"; 
    ..... 
    } 

所有似乎都沒問題,我可以訪問全球gchar。 似乎我不明白的東西

回答

2

您不明白Parm_Pars()函數給出的返回值的生命週期保證。它看起來並不是永遠活着的,所以如果你想堅持下去,你需要複製它。

只需在g_strdup()的電話中包裝該行以獲取動態分配的副本,你應該沒問題。當然,當你想釋放你的Xen_Server_Connection時,你必須在所有重複的字符串上調用g_free(),否則你會泄漏內存。

UPDATE:混合純chargchar很好,能說會道保證gchar僅僅是char的別名。我認爲他們甚至建議(某處)應用程序從不使用gchar

+0

哦,這樣一個愚蠢的錯誤。非常感謝!還有一個問題。在這種情況下,在一個代碼中混合使用char和gchars是否很好? – pugnator

+0

@unwind您在StackOverflow上閱讀此處:http://stackoverflow.com/questions/2800310/converting-an-array-of-characters-to-a-const-gchar/2800318#2800318 – ptomato