首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DBUS服务器崩溃

DBUS服务器崩溃
EN

Stack Overflow用户
提问于 2011-11-08 05:16:18
回答 1查看 345关注 0票数 1

我正在使用Glib绑定实现一个DBUS对象,并且在返回GArrays时遇到问题:

代码语言:javascript
复制
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;
}

当我使用测试客户端调用对象的方法时,我得到了一个分段错误:

代码语言:javascript
复制
waffleman@thegriddle$ ./testObject 
TestObject_get_data Entering

** ERROR **: out of memory
aborting...
Aborted (core dumped)

函数返回后,程序崩溃。这是我第一次使用Glib,所以我可能遗漏了一些明显的东西。我一直在读this tutorial,大多数例子都很好用。不幸的是,它没有一个将数组返回给客户端的示例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-08 05:56:58

如果你想在你的函数中分配数组,你需要传入一个引用。您当前的函数会泄漏内存,因为您在创建数组时会分配一个局部变量。

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8042715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档