question ong_list_insert_sorted usage

John Wendel john.wendel at metnet.navy.mil
Thu Jun 22 23:50:12 UTC 2006


Globe Trotter wrote:
> Hi,
> 
> OK, I know this is not a list for this question, but I have posted on the GTK
> list, but that is very low volume, and the answer is killing me. So, I
> apologize for this question, but after struggling with this for over a day, I
> wanted to ask you for your help regarding usage for g_list_insert_sorted. Can
> someone please help. Here are the operative parts of my program:
> 
> I have the following struct:
> 
> typedef struct _message_info
> {
> char *from;
> char *subject;
> char *face;
> long *ctime;
> } MESSAGE_INFO;
> 
> I have the following comparison function:
> 
> static gint compare_ctime (gconstpointer a, gconstpointer b)
> {
> const MESSAGE_INFO *p1=a,*p2=b;
> 
> return ((p1->ctime > p2->ctime) ? +1: (p1->ctime == p2->ctime) ? 0 : -1);
> }
> 
> and the following calling part:
> 
> Glist *headers;
> .....
>    MESSAGE_INFO *m;
>    m = g_new(MESSAGE_INFO,1);
>    m->from = safe_strdup (from);
>    m->subject = safe_strdup (subject);
>    m->face = safe_strdup (xface);
>    m->ctime = ctime;
>    headers = g_list_insert_sorted (headers, m,(GCompareFunc)compare_ctime);
> ....
> 
> I get segmentation fault with this, and was wondering how I could fix it. I
> guess my question is how to use g_list_insert_sorted.
> 
> I have Googled quite a bit on this, but have not been able to devise the fix.
> This is a programming error, I think, based on my inadequate knowledge. Any
> help would be very appreciated. 
> 
> Many thanks and best wishes,
> trotter

DISCLAIMER: I don't know what I'm writing about!

"m->ctime = ctime;" looks suspect. I don't see the definition of 
"ctime" in your code fragment, but it looks like you're assigning a 
long to a pointer.

Either in MESSAGE_INFO ctime should be declared "long ctime" or the 
assignment should be m->ctime = & ctime;

Hope this isn't totally off base.

Regards,

John






More information about the fedora-list mailing list