2010-06-12 51 views
5

我打算從C調用一個Vala函數,並且我有一個關於內存管理的問題。 函數看起來像這樣在瓦拉:Vala內存管理

int[] GetNumbers(); 

並且通過valac翻譯到C這樣

gint* GetNumbers(int* result_length1); 

當上述函數被選自C叫,是負責釋放gint*陣列呼叫者?

回答

6

一個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,那麼釋放它。