vorrei sottoporvi questo problema. Ho da poco iniziato ad apprendere il funzionamento della libreria grafica Gtk+3 sotto C e stavo scrivendo una piccola calcolatrice per esercitarmi. Non ho ancora completato il codice ma ho incontrato uno strano problema: compilando il file con la seguente istruzione:
Codice: Seleziona tutto
gcc `pkg-config --cflags gtk+-3.0` -o mcalc mcalc.c `pkg-config --libs gtk+-3.0`
Codice: Seleziona tutto
static bool just_exec = true;
static char last_ch[2];
/* Callback */
static gboolean num_button_callback(gpointer data, GtkButton *widget) {
char tmp_string[64];
if (just_exec) {
if (!strcmp(gtk_button_get_label(widget), "0")) return TRUE;
else {
gtk_entry_set_text(GTK_ENTRY (data), gtk_button_get_label(widget));
strcpy(last_ch, gtk_button_get_label(widget));
just_exec = false;
return TRUE;
}
}
...
for (int i, row = 0; i < 10; i++) {
if ((i % 3) == 0) row = i / 3;
sprintf(button_lbl, "%d", ((i - 1) + 10) - (i * 2));
buttons[i] = gtk_button_new_with_label(button_lbl);
g_signal_connect_swapped(buttons[i], "clicked", G_CALLBACK (num_button_callback), numbers_string); // <-- questa è la riga problematica
gtk_grid_attach(GTK_GRID (grid), buttons[i], i - row * 3, row + 2, 1, 1);
}
Codice: Seleziona tutto
(mcalc:7903): GLib-GObject-WARNING **: 22:01:13.106: invalid (NULL) pointer instance
(mcalc:7903): GLib-GObject-CRITICAL **: 22:01:13.106: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
(mcalc:7903): GLib-GObject-WARNING **: 22:01:13.106: invalid (NULL) pointer instance
(mcalc:7903): GLib-GObject-CRITICAL **: 22:01:13.106: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
Errore di segmentazione (core dump creato)
Ringrazio in anticipo chi si offrirà di aiutarmi :