2015-11-20 11 views
6

Ho un GArray di GValue (tutti diversi da zero) che è stato assegnato in fase di esecuzione con g_array_append_val. Mi chiedo come posso scoprire qual è l'indice dell'ultimo elemento, o più precisamente quanti elementi possiede l'array. Codice comeCome posso trovare la lunghezza di un determinato GArray?


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

fallirebbe con un fuori limite.

+1

Spetta a te tenere traccia del numero di elementi che hai aggiunto al garray. Quando viene creato, un garray alloca un blocco di memoria sufficiente a contenere un numero significativo di elementi senza riallocazione e ha un conteggio di '1'. (questo è fatto specificamente per prevenire la riallocazione frequente) Non so in alcun modo per dire esattamente quanti elementi possono essere aggiunti prima di riallocazione senza guardare la fonte glib. Vedi [** glib - Arrays **] (https://developer.gnome.org/glib/stable/glib-Arrays.html) –

+1

@ DavidC.Rankin Sembra improbabile. Come funzionerebbe 'g_array_append_val' se GArrays non tiene traccia delle loro dimensioni? – immibis

+0

Punto ben preso, ecco perché ho indirizzato l'OP al sorgente, perché non era documentato nella documentazione di glib - Arrays. –

risposta

12

Non sembra essere ben documentato, ma il numero degli elementi nella matrice è memorizzato nel campo array->len.

+0

Grazie! Ohh, dovrei aver guardato almeno il file sorgente! è proprio lì nella prima struttura _GArray, il doxygen nel file sorgente dice /** * GArray: * dati: un puntatore ai dati dell'elemento. I dati possono essere spostati come * elementi vengono aggiunti al #GArray. * len: il numero di elementi nel parametro #GArray che non include l'elemento * che termina l'elemento zero. * * Contiene i campi pubblici di un GArray. */ –

+2

Per riferimento futuro, è documentato [qui] (https://developer.gnome.org/glib/stable/glib-Arrays.html#GArray). – ptomato

Problemi correlati