【问题标题】:How can I find the length of a given GArray?如何找到给定 GArray 的长度?
【发布时间】:2016-02-23 12:07:48
【问题描述】:

我有一个在运行时使用 g_array_append_val 分配的 GValue(全非零)的 GArray。我想知道如何找出最后一个元素的索引,或者更准确地说,数组包含多少个元素。类似的代码


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

会因越界而失败。

【问题讨论】:

  • 由您来跟踪已添加到 garray 的元素数量。创建时,garray 分配的内存块足以容纳大量元素而无需重新分配,并且引用计数为1。 (这样做是为了防止频繁重新分配)我不知道有什么方法可以在不查看 glib 源代码的情况下准确地知道在重新分配之前可以添加多少元素。见glib - Arrays
  • @DavidC.Rankin 似乎不太可能。如果 GArrays 不跟踪它们的大小,g_array_append_val 将如何工作?
  • 点得很好,这就是为什么我将 OP 提到源代码,因为它没有记录在 glib - Arrays 文档中。

标签: c glib


【解决方案1】:

似乎没有很好的文档记录,但是数组中元素的数量存储在字段array->len中。

它被描述为here

【讨论】:

  • 谢谢!哦,伙计,我至少应该看看源文件!就在第一个 struct _GArray 中,源文件中的 doxygen 表示 /** * GArray: * data: 指向元素数据的指针。当 * 元素添加到#GArray 时,数据可能会被移动。 * len:#GArray 中的元素数,不包括 * 可能的终止零元素。 * * 包含 GArray 的公共字段。 */
  • 为了将来参考,它被记录在here
猜你喜欢
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 2019-10-10
  • 2010-09-13
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
相关资源
最近更新 更多