2010-06-12 6 views
5

Mam zamiar wywołać funkcję Vala z C i mam pytanie dotyczące zarządzania pamięcią. Funkcja wygląda to w Vala:Zarządzanie pamięcią Vala

int[] GetNumbers(); 

i jest tłumaczone przez valac do C jak to

gint* GetNumbers(int* result_length1); 

Gdy powyższa funkcja jest wywoływana z C, to rozmówca odpowiedzialny za uwolnienie tablicę gint* ?

Odpowiedz

6

Pytanie Vala! Fajnie!

Vala ma użyteczną opcję -C, która pozwala rzucić okiem na generowany kod C. Funkcja ta, na przykład ...

int[] GetNumbers() { 
    return new int[] {1,2,3}; 
} 

... kiedy zestawiane z ...

valac -C -c test.vala 

... ujawni poniższy kod C (w 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; 
} 

Uwaga na g_new0; więc tak, chcesz g_free to.

Nawet jeśli przechodzisz do pliku nagłówkowego i nie możesz sobie pozwolić na obejrzenie każdej implementacji, wygląda na to, że obowiązują te same zasady, co w C: jeśli nie jest to const, zwolnij.