dzh*_*lil 5 c memory-management vala
我将从C调用Vala函数,我对内存管理有疑问.该函数在Vala中如下所示:
int[] GetNumbers();
Run Code Online (Sandbox Code Playgroud)
并由valacC 翻译成这样的
gint* GetNumbers(int* result_length1);
Run Code Online (Sandbox Code Playgroud)
当从C调用上述函数时,调用者是否负责释放gint*数组?
一个瓦拉问题!挺酷的!
Vala有一个有用的-C选项,可以让你看看它生成的C代码.这个功能,例如......
int[] GetNumbers() {
return new int[] {1,2,3};
}
Run Code Online (Sandbox Code Playgroud)
...编译时......
valac -C -c test.vala
Run Code Online (Sandbox Code Playgroud)
...将显示以下C代码(in 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;
}
Run Code Online (Sandbox Code Playgroud)
注意g_new0; 是的,你想要g_free它.
即使您只是通过头文件,并且无法查看每个实现,看起来像C中一样适用相同的规则:如果不是const,请释放它.
| 归档时间: |
|
| 查看次数: |
972 次 |
| 最近记录: |