Vala内存管理

5
我将要从C中调用Vala函数,并且我有一个关于内存管理的问题。 在Vala中,该函数长这样:
int[] GetNumbers();

并且通过valac将其转换为C语言,如下所示

gint* GetNumbers(int* result_length1);

当从C中调用上述函数时,调用者是否负责释放数组?
1个回答

6
一个关于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,就释放它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接