首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vala内存管理

Vala内存管理
EN

Stack Overflow用户
提问于 2010-06-13 05:45:52
回答 1查看 1.1K关注 0票数 5

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

代码语言:javascript
复制
int[] GetNumbers();

并被valac翻译成C语言,如下所示

代码语言:javascript
复制
gint* GetNumbers(int* result_length1);

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-13 06:32:10

一个Vala问题!太酷了!

Vala有一个有用的-C选项,允许您查看它生成的C代码。此函数,例如...

代码语言:javascript
复制
int[] GetNumbers() {
    return new int[] {1,2,3};
}

...when编译为...

代码语言:javascript
复制
valac -C -c test.vala

...will展示了以下C代码(用test.c编写)...

代码语言:javascript
复制
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,就释放它。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3030212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档