【问题标题】:Has Vala memory leak when building shared library?构建共享库时有 Vala 内存泄漏吗?
【发布时间】:2015-07-14 12:04:20
【问题描述】:

这个 Vala 代码在构建为共享库 (.so) 时会发生内存泄漏吗?

瓦拉:

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;
}

编译:valac --library=test -H test.h "test.vala" -X -fPIC -X -shared -o test.so

我对@9​​87654325@ 中没有内存释放感到惊讶。

  • g_strconcat 是否会将分配的内存存储在全局变量中(可能是线程本地的)?
  • 如果我从外部程序多次调用test_info 而不解除分配,是否会发生内存泄漏?

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

【问题讨论】:

    标签: c glib vala


    【解决方案1】:

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

    如果你从 vala 调用这个库函数,编译器会确保它被释放。

    如果您从C 调用它,您应该阅读GLib documentation for g_strconcat

    将所有给定的字符串连接成一个长字符串。这 不再需要时,应使用 g_free() 释放返回的字符串。

    我建议你阅读:

    另见this question(不过是关于 Genie,Valas 的“姐妹语言”)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多