5

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

int[] GetNumbers();

并像这样被翻译valac成C

gint* GetNumbers(int* result_length1);

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

4

1 回答 1

6

一个瓦拉的问题!挺酷的!

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,则释放它。

于 2010-06-12T22:32:09.880 回答