GLib ライブラリは、2 つの単一リンク リスト ノードを比較するために次のように実行されます。
typedef struct _GSList {
_GSList *link;
void *data;
} GSList;
int g_sListPosition(GSList *list, GSList *llink) {
int cnt = 0;
while(list) {
if(list == llink) // Note here
return cnt;
cnt++;
list = list->link;
}
return -1;
}
しかし、このようにノードを比較すると。false を返します。
int main(void) {
GSList *list = NULL, *list2 = NULL;
list2 = g_sListAppend(list2, "def");
list = g_sListAppend(list, "abc");
list = g_sListAppend(list, "def");
list = g_sListAppend(list, "ghi");
printf("%d", g_sListPosition(list, list2)); // Return -1 ?
}
それで、ここで比較するのは何ですか(DOCでは、 GSList 内の特定の要素の位置を取得すると書かれています)、ノードまたはリストに含まれるデータですか?
編集:与えられたすべてのおかげで、私の間違いは実際に間違った方法で行っていました。リストの同じインスタンスを比較する必要があります。