5
我打算從C調用一個Vala函數,並且我有一個關於內存管理的問題。 函數看起來像這樣在瓦拉:Vala內存管理
int[] GetNumbers();
並且通過valac
翻譯到C這樣
gint* GetNumbers(int* result_length1);
當上述函數被選自C叫,是負責釋放gint*
陣列呼叫者?
我打算從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
,那麼釋放它。