2015-11-20 120 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