2014-03-13 50 views
0

我有這段非常簡單的代碼。我在C中聲明瞭一個glib數組,然後使用g_array_append_val()函數填充它,最後打印出數組內容。打印出來的版本不會像我所期望的那樣將數組項目顯示爲0.0,1.0,2.0,... 9.0。這有什麼不對?有任何想法嗎?glib g_array_append_val()代理奇怪

GArray *data; 
data = g_array_new(FALSE, FALSE, sizeof(double)); 
int i; 
for(i = 0; i < 10; i++) { 
    double d = (double)i; 
    g_array_append_val(data, d); 
} 
for(i = 0; i < 10; i++) 
    printf("%f ", g_array_index(data, double, i)); 

free(data); 

輸出是在這裏:

0.000000 1.000000 2.000000 3.000000 4.000000 5.000000 0.000000 0.000000 0.000000 0.000000 

我連擡頭的測試套件glib庫,看到他們做這種具體的方式。這讓我感到困惑。

+2

這對於我來說是最小的測試用例的一部分(我基本上只是將它們包含在main()中)。你這樣做對你有用嗎?我想在你的程序的其他地方可能會有一些內存損壞,從而導致問題在這裏... – nemequ

+0

你說得對。它一定是某種內存腐敗。我在測試套件函數中運行這個。儘管如此,函數中沒有其他的東西。只要我將它移動到主函數並從中移除其他所有內容(沒有調用測試函數),它就開始工作。看起來我的測試套件不知何故破壞了內存。感謝您的幫助,並抱歉發佈了一個對其他人可能不太有用的問題。如果您將其作爲答案發布,我會接受它。 – pkout

回答

1

用戶nemequ發給我正確的方向。我發現在另一個函數調用中,我使用免費(數據)發佈數據GArray;電話,這是不好的。 GArrays應該使用g_array_free(data,TRUE)釋放;那是我的問題。內存被損壞了。