2015-11-20 19 views
6

Mam GArray wartości GValue (wszystkie niezerowe), które zostały przydzielone w środowisku wykonawczym z g_array_append_val. Zastanawiam się, jak mogę się dowiedzieć, jaki jest indeks ostatniego elementu, a dokładniej, ile elementów ma ta tablica. Kod taki jakJak mogę znaleźć długość danej GArray?


for (length=0;g_value_get_int(&g_array_index(array, GValue, length)); length++); 
return length 

może zawieść z poza granicami.

+1

To od Ciebie zależy śledzenie liczby elementów dodanych do garażu. Po utworzeniu garawka przydziela blok pamięci wystarczający do przechowywania znacznej liczby elementów bez realokacji i ma wartość "1". (robi się to specjalnie w celu uniknięcia częstej realokacji) Nie wiem w żaden sposób, aby dokładnie powiedzieć, ile elementów można dodać przed ponownym przydzieleniem bez patrzenia na źródło glib. Zobacz [** glib - Array **] (https://developer.gnome.org/glib/stable/glib-Arrays.html) –

+1

@ DavidC.Rankin Wydaje się nieprawdopodobne. Jak działa 'g_array_append_val', jeśli GArrays nie śledzi ich rozmiaru? – immibis

+0

Dobrze wskazany punkt, dlatego odesłałem OP do źródła, ponieważ nie zostało to udokumentowane w dokumentacji glib - Arrays. –

Odpowiedz

12

Nie wydaje się być dobrze udokumentowany, ale liczba elementów w tablicy jest przechowywana w polu array->len.

+0

Dzięki! Och, stary, powinienem przynajmniej zajrzeć do pliku źródłowego! jest tam w pierwszej strukturze _GArray, doxygen w pliku źródłowym mówi: /** * GArray: * dane: wskaźnik do danych elementu. Dane mogą być przenoszone jako * elementy są dodawane do #GArray. * len: liczba elementów w #GArray bez elementu * możliwe zakończenie zerowania. * * Zawiera publiczne pola GArray. */ –

+2

W celu późniejszego odniesienia, jest to udokumentowane [tutaj] (https://developer.gnome.org/glib/stable/glib-Arrays.html#GArray). – ptomato