gpt4 book ai didi

c - 瓦拉内存管理

转载 作者:太空狗 更新时间:2023-10-29 15:01:27 26 4
gpt4 key购买 nike

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

int[] GetNumbers();

并由 valac 像这样翻译成 C

gint* GetNumbers(int* result_length1);

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

最佳答案

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

关于c - 瓦拉内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3030212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com