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

标签 c glib vala

这个 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

令我惊讶的是 test_info 中没有内存释放。

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

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

最佳答案

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

如果您从 vala 调用此库函数,编译器将确保它已被释放。

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

Concatenates all of the given strings into one long string. The returned string should be freed with g_free() when no longer needed.

我建议您阅读:

另请参阅this question (虽然这是关于 Sprite ,瓦拉斯“姐妹语言”)。

关于c - Vala构建共享库时是否存在内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31406075/

相关文章:

dialog - 我如何使用 Gtk 在对话框中询问用户一些事情?

c - 添加值的递归函数正在输出异常值

c - 指向字符串 : Access issues 的指针数组

c - 如何正确编译和链接 gdbus 程序

dependencies - gobject 依赖 glib 还是 glib 依赖 gobject?

c - 在 GLIB 主循环中添加 fd

c++ - 访问硬编码数组和运行时初始化数组之间是否存在任何性能差异?

c - OpenCL 在 GPU 上同时解决两个不同大小的问题

user-interface - 如何使 Gtk.ListBoxRow 接受右键单击任何区域?

gtk - GTK 中一项操作的多个快捷方式