【发布时间】:2011-11-07 21:16:18
【问题描述】:
我正在使用 Glib 绑定实现 DBUS 对象,但在返回 GArray 时遇到问题:
gboolean TestObject_get_data(TestObject* obj, GArray* buffer, GError** error)
{
int i;
printf("%s Entering\n", __PRETTY_FUNCTION__);
buffer = g_array_new(FALSE, FALSE, sizeof(char));
if(buffer)
{
for(i = 0; i < 5 ; i++)
{
g_array_append_val(buffer, i);
}
return TRUE;
}
/* TODO: Error handling */
return FALSE;
}
当我使用测试客户端调用对象的方法时,出现分段错误:
waffleman@thegriddle$ ./testObject
TestObject_get_data Entering
** ERROR **: out of memory
aborting...
Aborted (core dumped)
函数返回后程序崩溃。这是我第一次使用 Glib,所以我可能缺少一些明显的东西。我一直在阅读this tutorial,并且大多数示例都有效。不幸的是,它没有将数组返回给客户端的示例。
【问题讨论】:
-
看起来@Mike 是正确的。您创建一个新的内存区域并获得一个地址。您需要以某种方式将该地址传递回被调用方。答案是指向指针的指针。
标签: c linux glib dbus systems-programming