构建共享库时Vala内存是否泄漏?

时间:2015-07-14 12:04:20

标签: c glib vala

当它构建为共享库(.so)时,这个Vala代码内存是否会泄漏?

瓦拉:

namespace test {
    public static string info(string name){
        return "Hello " + name;
    }
}

源代码(valac -C

gchar* test_info (const gchar* name) {
    gchar* result = NULL;
    const gchar* _tmp0_ = NULL;
    gchar* _tmp1_ = NULL;
    g_return_val_if_fail (name != NULL, NULL);
    _tmp0_ = name;
    _tmp1_ = g_strconcat ("Hello ", _tmp0_, NULL);
    result = _tmp1_;
    return result;
}

编译:{{1​​}}

我对valac --library=test -H test.h "test.vala" -X -fPIC -X -shared -o test.so中没有内存释放感到惊讶。

  • test_info将分配的内存存储在全局变量(可能的线程本地)中吗?
  • 如果我在没有解除分配的情况下从外部程序多次拨打g_strconcat会导致内存泄漏吗?

我对这个可能的简单问题感到抱歉,但我是Vala的新手(我在Go,Python,C ++等领域的主要经验)

1 个答案:

答案 0 :(得分:2)

您的代码将返回拥有的字符串,因此调用者负责内存释放。

如果从vala调用此库函数,编译器将确保它已被解除分配。

如果您从C拨打电话,则应阅读GLib documentation for g_strconcat

  

将所有给定字符串连接成一个长字符串。该   

时,应该使用g_free()释放返回的字符串

我建议你阅读:

另见this question(关于Genie,Valas的“姊妹语言”)。