0

GList の配列を作成してアクセスするにはどうすればよいですか?

私はこれを試しました:

GList* clist[5];

for(i = 0; i<5; i++)
        clist[i]=g_list_alloc();

clist[0] = g_list_append(clist[0], five);

clistにメモリを正しく割り当てていないと思います。

4

1 に答える 1

2

g_list_alloc を誤解しています。リストを作成するためではなく、単一のリンクを割り当てるために使用されます。g_list_* 関数は、空のリストを意味する NULL ポインターを受け入れるため、空のリストを「作成」するために実際に行うことは、ポインターを NULL に設定することだけです。つまり、ループを取り除くことができ、次のようにするだけです。

GList* clist[5] = { NULL, };

より完全な例:

int i, j;
/* Make clist an array of 5 empty GLists. */
GList* clist[5] = { 0, };

/* Put some dummy data in each list, just to show how to add elements.  In
   reality, if we were doing it in a loop like this we would probably use
   g_list_prepend and g_list_reverse when we're done—see the g_list_append
   documentation for an explanation. */
for(i = 0; i<5; i++) {
  for(j = 0; j<5; j++) {
    clist[i] = g_list_append (clist[i], g_strdup_printf ("%d-%d", i, j));
  }
}

/* Free each list. */
for(i = 0; i<5; i++) {
  if (clist[i] != NULL) {
    g_list_free_full (clist[i], g_free);
  }
}
于 2013-11-04T20:25:56.243 に答える