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

时间:2015-02-02 14:48:03

标签: c glib 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%的情况。 我做错了什么,或者我错过了什么?

1 个答案:

答案 0 :(得分:0)

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

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