C から Vala 関数を呼び出すつもりですが、メモリ管理について質問があります。関数は Vala では次のようになります。
int[] GetNumbers();
valac
そして、このようにCに翻訳されます
gint* GetNumbers(int* result_length1);
gint*
上記の関数が C から呼び出された場合、呼び出し元は配列を解放する責任がありますか?
C から Vala 関数を呼び出すつもりですが、メモリ管理について質問があります。関数は Vala では次のようになります。
int[] GetNumbers();
valac
そして、このようにCに翻訳されます
gint* GetNumbers(int* result_length1);
gint*
上記の関数が C から呼び出された場合、呼び出し元は配列を解放する責任がありますか?
ヴァラの質問!なんてかっこいい!
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
、解放してください。