Re: Strange behavior of my program

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2013-12-10 at 06:31 +0100, onetmt wrote:
> Il 01/12/2013 21:01, Alberto Zichittella ha scritto:
> > This message dialog causes a strange behavior on my program. It seems
> > that the call to gtk_message_dialog_new() change the value of the const
> > gchar* pointer, last parameter. 
> > 
> > Furthermore, the value of the const gchar* variable "message" change
> > from "Il risultato e' -number-" to "Il risult(", I don't know why. 
> > I know that the call changes the value (and the address) of message
> > because I use gdb.
> > 
> > I develope on ubuntu gnome 13.10 using Code::Blocks , on a 64bit system,
> > with gtk+-3.0
> > 
> > 
> >     const gchar* message;
> >     /*the function risolviFormat() create a gchar* pointer, using malloc
> > to allocate memory */
> >     message = espressione->risolviFormat();   //message is, for example,
> 
> Try this substitution:
> 
>     gchar *message;
> 
>     message = g_strdup_printf("Il risultato e': %f", result);
>     dialog = gtk_message_dialog_new(NULL,
>                                     GTK_DIALOG_DESTROY_WITH_PARENT,
>                                     GTK_MESSAGE_INFO,
>                                     GTK_BUTTONS_OK,
>                                     (const gchar *)message);
> 

You really should not be passing a literal string as a format.

What you really want is:

dialog = gtk_message_dialog_new(NULL,
                                GTK_DIALOG_DESTROY_WITH_PARENT,
                                GTK_MESSAGE_INFO,
                                GTK_BUTTONS_OK,
                                "Il risultato e': %f",
                                result);


> >  "Il risultato e' 789"
> >     dialog = gtk_message_dialog_new (NULL,
> >                                   GTK_DIALOG_DESTROY_WITH_PARENT,
> >                                   GTK_MESSAGE_INFO,
> >                                   GTK_BUTTONS_OK,
> >                                   message);
> >    /*now message is "Il risult(" 
> >    gtk_window_set_position(GTK_WINDOW(dialog),GTK_WIN_POS_CENTER_ALWAYS);
> >    gtk_dialog_run (GTK_DIALOG (dialog));
> >    gtk_widget_destroy (dialog);




> >    /*this call causes a segfault because message pointer changed his
> > value */
> >     free(message);

This causes a segfault cause you're freeing glib memory with 
libc 'free()'


> >    return;
> > 
> > -- 
> > 
> > 
> > Mio blog: http://newbufferedwriter.blogspot.com/
> > http://prodigious.altervista.org/Scrobblit/index.php
> > 
> > 
> > _______________________________________________
> > gtk-list mailing list
> > gtk-list@xxxxxxxxx
> > https://mail.gnome.org/mailman/listinfo/gtk-list
> > 
> 
> 


_______________________________________________
gtk-list mailing list
gtk-list@xxxxxxxxx
https://mail.gnome.org/mailman/listinfo/gtk-list




[Index of Archives]     [Touch Screen Library]     [GIMP Users]     [Gnome]     [KDE]     [Yosemite News]     [Steve's Art]

  Powered by Linux