2015-11-20 13 views
6

私は、実行時にg_array_append_valで割り当てられたGValue(すべてゼロでない)のGArrayを持っています。どの要素が最後の要素のインデックスであるか、より正確には何個の要素が配列を保持しているかを調べるにはどうすればよいでしょうか。特定のGArrayの長さはどのようにして調べることができますか?


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

のようなコードは、範囲外で失敗します。

+1

garrayに追加した要素の数を追跡するのはあなた次第です。作成されると、garrayは、再割り当てなしでかなりの数の要素を保持するのに十分なメモリブロックを割り当て、refcountが '1'です。 (これは頻繁な再割り当てを防ぐために具体的に行われています)glibソースを調べなくても、再割り当て前に追加できる要素の数を正確に伝える方法はわかりません。 [** glib - Arrays **](https://developer.gnome.org/glib/stable/glib-Arrays.html)を参照してください。 –

+1

@ DavidC.Rankinそう思わないでしょう。 GArrayがサイズを追跡しない場合、 'g_array_append_val'はどのように動作しますか? – immibis

+0

ポイントがうまく取られたので、私はOPをソースに参照しました。なぜなら、glib-Arraysのドキュメントには記載されていないからです。 –

答えて

12

よく書かれているようではありませんが、配列内の要素の数はフィールドarray->lenに格納されています。

+0

ありがとう!オハイオ州の男私はソースファイルを少なくとも見ていたはずです!最初の構造体_GArrayの中にあります。ソースファイルのdoxygenには、 /** * GArray: * data:要素データへのポインタが含まれています。データは、 *要素が#GArrayに追加されたため移動できます。 * len:#GARray内の要素数で、可能なゼロ要素の終了可能な *を含まない。 * * GArrayのパブリックフィールドが含まれます。 */ –

+2

今後の参考として、[here](https://developer.gnome.org/glib/stable/glib-Arrays.html#GArray)に記載されています。 – ptomato

関連する問題