【问题标题】:Vala memory managementVala 内存管理
【发布时间】:2010-06-12 21:45:51
【问题描述】:

我要从 C 中调用一个 Vala 函数,我有一个关于内存管理的问题。 该函数在 Vala 中如下所示:

int[] GetNumbers();

并被valac这样翻译成C

gint* GetNumbers(int* result_length1);

当上面的函数被 C 调用时,调用者是否负责释放 gint* 数组?

【问题讨论】:

    标签: c memory-management vala


    【解决方案1】:

    Vala 问题!太酷了!

    Vala 有一个有用的-C 选项,可让您查看它生成的 C 代码。比如这个函数……

    int[] GetNumbers() {
        return new int[] {1,2,3};
    }
    

    ...编译时使用...

    valac -C -c test.vala
    

    ...将显示以下 C 代码(在 test.c 中)...

    gint* GetNumbers (int* result_length1) {
        gint* result = NULL;
        gint* _tmp0_ = NULL;
        gint* _tmp1_;
        result = (_tmp1_ = (_tmp0_ = g_new0 (gint, 3), _tmp0_[0] = 1, _tmp0_[1] = 2, _tmp0_[2] = 3, _tmp0_), *result_length1 = 3, _tmp1_);
        return result;
    }
    

    注意g_new0;所以是的,你想g_free它。

    即使你只是通过头文件,也懒得查看每个实现,它看起来也适用于 C 中的相同规则:如果它不是 const,则释放它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-21
      • 2012-03-21
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      相关资源
      最近更新 更多