Oppure

Loading
27/01/13 18:50
Dante.cpp
Provato, ecco un'esempio di output:

`�

�

�
`�
EB�
aaa
27/01/13 19:14
Dichiara questo array

Btn button[4][4];

al di fuori della funzione grf_tastiera, globalmente
27/01/13 19:24
Dante.cpp
Bè si così funziona,, ma ho una variabile globale... Sto cercando di evitare proprio questo.
aaa
27/01/13 20:10
tasx
Postato originariamente da nessuno:

Dichiara questo array

Btn button[4][4];

al di fuori della funzione grf_tastiera, globalmente


Nessuno ha ragione, infatti dichiarando come variabile locale viene distrutta a fine funzione:

Automatic allocation happens when you declare an automatic variable, such as a function argument or a local variable. The space for an automatic variable is allocated when the compound statement containing the declaration is entered, and is freed when that compound statement is exited. In GNU C, the length of the automatic storage can be an expression that varies. In other C implementations, it must be a constant. (chemie.fu-berlin.de/chemnet/use/info/libc/…) se invece vuoi che sia sempre disponibile o fai come ti ha detto Nessuno o lo allochi dinamicamente tramite una malloc....

infatti il gtkwidget della tua struttura rimane allocato perchè viene creato dinamicamente qui:
gtk_button_new_with_label(button[rows][cols].lab);

invece "char lab[2]" no....
aaa
27/01/13 20:23
Dante.cpp
Temo di non seguire il ragionamento, che differenza fa la modalità di allocazione del vettore?
aaa
27/01/13 20:35
Sai cosa succede ad una variabile o ad un array allocato localmente in una funzione quando la funzione termina?
27/01/13 20:49
Dante.cpp
Conosco le regole di visibilità, intendevo: che differenza fa l'allocazione run time, con l'allocazione a tempo di compilazione?

Poi come descritto qui: developer.gnome.org/gobject/unstable/… l'ultimo parametro di g_signal_connect() serve proprio come parametro per le funzioni collegate.

Quindi non ci dovrebbero essere problemi di visibilità, mi viene scomodo ricorrere alle variabili globali...
aaa
27/01/13 20:56
Se conosci le regole saprai che button allocato in quel modo, quando la funzione termina, non esiste più.

Concordi?

Se non vuoi usare la variabile locale, allora alloca l'array in memoria dinamicamente.