2015-11-20 151 views
6

我有一個在運行時用g_array_append_val分配的GValue(全部非零)的GArray。我想知道如何才能找出最後一個元素的索引,或者更準確地說,數組有多少個元素。代碼如我怎樣才能找到給定的GArray的長度?


for (length=0;g_value_get_int(&g_array_index(array, GValue, length)); length++); 
return length 

將失敗並出現界限。

+1

您需要記錄添加到Garray的元素數量。在創建時,Garray會分配一塊內存足以容納大量元素而無需重新分配,並具有「1」的重新計數。 (這是專門爲防止頻繁重新分配而完成的)我不知道有什麼方法可以確切地說明在重新分配之前可以添加多少個元素,而無需查看glib源。請參閱[** glib - Arrays **](https://developer.gnome.org/glib/stable/glib-Arrays.html) –

+1

@ DavidC.Rankin似乎不太可能。如果GArray不跟蹤它們的大小,'g_array_append_val'如何工作? – immibis

+0

好的點,這就是爲什麼我把OP引用到源代碼,因爲它沒有在glib - Arrays文檔中記錄。 –

回答

12

它似乎沒有很好的記錄,但數組中元素的數量存儲在字段array->len

+0

謝謝!哦,我應該至少看過源文件!是在第一個結構_GArray中,源文件中的doxygen說 /** * GArray: * data:指向元素數據的指針。數據可能會被移動爲 *元素被添加到#GArray。 * len:#Grray中元素的數量,不包括 *可能的終止零元素。 * *包含GArray的公共字段。 */ –

+2

爲了將來的參考,它被記錄在[這裏](https://developer.gnome.org/glib/stable/glib-Arrays.html#GArray)。 – ptomato