Newsgroup: it.comp.os.linux.development
Titolo: gtk+

Perchè questo codice mi da segmentation fault?
// funzione di callback che ferma il ciclo gtk_main
void close_application( GtkWidget *widget, GdkEvent *event, gpointer data
)
{
 
 gtk_main_quit();
}
//scrive sull'output quello che c'è nella text entry
void send_data(GtkWidget *widget, GtkWidget *entry)
{
gchar *entry_text;
entry_text = gtk_entry_get_text(GTK_ENTRY(entry)); //segmentation fault è
qui
printf("Entry contents: %s\n", entry_text);
}
//funzione che crea la finestra
GtkWidget*
create_tw_TextWindow (void)
{
  GtkWidget *tw_TextWindow;
  GtkWidget *table7;
  GtkWidget *table9;
  GtkWidget *tb_esci;
  GtkWidget *tb_invia;
  GtkWidget *tl_error;
  GtkWidget *te_msg;
  GtkWidget *ts_vscroll;
  GtkWidget *tt_visor;
  tw_TextWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_object_set_data (GTK_OBJECT (tw_TextWindow), "tw_TextWindow",
tw_TextWindow);
  gtk_window_set_title (GTK_WINDOW (tw_TextWindow), "Communicazione
testuale");
  gtk_widget_set_usize (tw_TextWindow, 400, 300);
  table7 = gtk_table_new (3, 1, FALSE);
  gtk_widget_ref (table7);
  gtk_object_set_data_full (GTK_OBJECT (tw_TextWindow), "table7", table7,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (table7);
  gtk_container_add (GTK_CONTAINER (tw_TextWindow), table7);
  table9 = gtk_table_new (1, 3, FALSE);
  gtk_widget_ref (table9);
  gtk_object_set_data_full (GTK_OBJECT (tw_TextWindow), "table9", table9,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (table9);
  gtk_table_attach (GTK_TABLE (table7), table9, 0, 1, 2, 3,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0);
  tb_esci = gtk_button_new_with_label ("Esci");
  gtk_widget_ref (tb_esci);
  gtk_object_set_data_full (GTK_OBJECT (tw_TextWindow), "tb_esci",
tb_esci,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_signal_connect (GTK_OBJECT (tb_esci), "clicked",
GTK_SIGNAL_FUNC(close_application),NULL);
  gtk_widget_show (tb_esci);
 
 
  gtk_table_attach (GTK_TABLE (table9), tb_esci, 2, 3, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  tb_invia = gtk_button_new_with_label ("Invia");
  gtk_widget_ref (tb_invia);
  gtk_object_set_data_full (GTK_OBJECT (tw_TextWindow), "tb_invia",
tb_invia,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_signal_connect (GTK_OBJECT (tb_invia), "pressed",
  GTK_SIGNAL_FUNC(send_data), te_msg);
 
  gtk_widget_show (tb_invia);
  gtk_table_attach (GTK_TABLE (table9), tb_invia, 0, 1, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  tl_error = gtk_label_new ("");
  gtk_widget_ref (tl_error);
  gtk_object_set_data_full (GTK_OBJECT (tw_TextWindow), "tl_error",
tl_error,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (tl_error);
  gtk_table_attach (GTK_TABLE (table9), tl_error, 1, 2, 0, 1,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_misc_set_alignment (GTK_MISC (tl_error), 0, 0.5);
  te_msg = gtk_entry_new ();
  gtk_widget_ref (te_msg);
  gtk_object_set_data_full (GTK_OBJECT (tw_TextWindow), "te_msg", te_msg,
                            (GtkDestroyNotify) gtk_widget_unref);
 
 
  gtk_widget_show (te_msg);
  gtk_table_attach (GTK_TABLE (table7), te_msg, 0, 1, 1, 2,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  ts_vscroll = gtk_scrolled_window_new (NULL, NULL);
  gtk_widget_ref (ts_vscroll);
  gtk_object_set_data_full (GTK_OBJECT (tw_TextWindow), "ts_vscroll",
ts_vscroll,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (ts_vscroll);
  gtk_table_attach (GTK_TABLE (table7), ts_vscroll, 0, 1, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (ts_vscroll),
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
  tt_visor = gtk_text_new (NULL, NULL);
  gtk_widget_ref (tt_visor);
  gtk_object_set_data_full (GTK_OBJECT (tw_TextWindow), "tt_visor",
tt_visor,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (tt_visor);
  gtk_container_add (GTK_CONTAINER (ts_vscroll), tt_visor);
 
  return tw_TextWindow;
}
//si mostra la finestra e parte il ciclo principale
TextFunction()
{
 GtkWidget* TextWindow;
 TextWindow = create_tw_TextWindow();
 gtk_widget_show (TextWindow);
 gtk_main();
}
main(int argc, char* argv[])
{
 
   gtk_init(&argc, &argv);
   TextFunction();	
 
 
}
grazie per gli aiuti

 Perchè questo codice mi da segmentation fault?
strace(1)
gdb(1)
Bye,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)           [ 
http://www.radiance.d2g.com/~zefram
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

   te_msg = gtk_entry_new ();
hum... qui invece allochi la variabile.
Ora  hai tutti  i  dati  per sistemare  il  problema, una  soluzione
semplice è quella di spostare  la chiamata a gtk_signal_connect dopo
la creazione dell'entrybox.
byeZ!
-- 
Vanni Brutto
| email 
za...@nofesso.libero.it
      |
| irc nick VanniB   |   ICQ 18526701 |
--- rimuovi nofesso per rispondere ---
---PC powered by Linux kernel 2.4.18za
Un OS per trovarli, un OS per domarli,
Un  OS   per  ghermirli  e   nel  buio
incatenarli.