On Fri, May 27, 2005 at 11:50:44PM -0400, Kim Adil wrote:
> I am trying to figure out how to use GArray containers. This gives me 
> rubbish in the printf output. I think it relates to how I am accessing 
> the data nce it is in the array rather than what is stored in the array. 
> Any comments and ideas would be appreciated.

It seem you'd better use GPtrArray to store the pointers,
instead of GArray that stores the full structures.

>  GArray *garray;
> 
> 
>  garray = g_array_new (FALSE, FALSE, sizeof (Machine));
>  for (i = 1; i < 10000; i++){
>      Machine *newMach = machine_new(i,"trd11","d11","joe");
>      g_array_append_val (garray, newMach);

Two problems here: You pass a *pointer* to Machine, not
a Machine, so a pointer is stored into garray.  And newMach
is probably never freed.

You could copy the contents of newMach into the array,
provived it's a constant-size structure with

    Machine *newMach = machine_new(i,"trd11","d11","joe");
    Machine m = *newMach;
    g_array_append_val(garray, m);
    machine_free(newMach)

But this is so obviously awkward (and incorrect, if Machine
contains any dynamically allocated data) that you don't want
to do this.  Instead, use GPtrArray:

    GPtrArray *array;

    ...
        Machine *newMach = machine_new(...);
        g_ptr_array_add(array, newMach);

Yeti


--
A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to