如何安全地使用 g_variant_iter_loop 和通过 DBUS 接收的数据

How to safely use g_variant_iter_loop with data received via DBUS

我的堆栈跟踪看起来像这样

/usr/lib/libglib-2.0.so.0(g_variant_iter_loop+0xb4)
/usr/lib/libglib-2.0.so.0(g_variant_get_int32+0x1c) 
/usr/lib/libglib-2.0.so.0(g_variant_type_is_subtype_of+0x3c) 

它的代码如下:

while ((NULL != iterator) && (true == g_variant_iter_loop (iterator, "y", &extractedValue)))
{
  // do something with extractedValue
}

使用 GVariant 通过 DBUS 接收数据。 也许我没有正确使用 glib API,但这只在 1% 的情况下失败。 我是做错了什么,还是遗漏了什么?

当只需要一个元素时,最好使用

if(iter != NULL) {
    g_variant_iter_next (iterator, "u", &value);
}