我正在使用Glib绑定实现一个DBUS对象,并且在返回GArrays时遇到问题:
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,大多数例子都很好用。不幸的是,它没有一个将数组返回给客户端的示例。
发布于 2011-11-08 05:56:58
如果你想在你的函数中分配数组,你需要传入一个引用。您当前的函数会泄漏内存,因为您在创建数组时会分配一个局部变量。
gboolean TestObject_get_data(TestObject *obj, GArray **buffer, GError **error)
{
if (buffer) {
*buffer = g_array_new(FALSE, FALSE, sizeof(char));
if (*buffer) {
int i;
for (i = 0; i < 5 ; ++i) {
g_array_append_val(*buffer, i);
}
return TRUE;
}
}
return FALSE;
}https://stackoverflow.com/questions/8042715
复制相似问题