Hi,
ich habe einmal wieder ein kleineres Problem bei Gtk. Und zwar benötige ich in der G_Callback Funktion die Elementnummer eines malloc Array`s. Mein Problem ist der gpointer von g_signal_connect. Bei dem Gui-Aufruf wurde die Schleife schon komplett durchlaufen und somit wird bei jedem Knopfdruck die letzte Zahl der Schleife also i=4 übertragen und ein Speicherleck verursacht.
Version 1:
Code:
void c_clicked(GtkButton *button, gpointer user_data){
int *i = user_data;
printf(*i=%i\n",*i);
...
extern int *Ary;
printf(Ary[*i]=%i\n",Ary[*i]);
}
int main(){
...
GtkWidget c_button[4];
for(int i=0,i<4, i++){
c_button[i] = gtk_button_new_with_label ("text");
g_signal_connect (c_button[i], "clicked", G_CALLBACK (b_clicked), &i);
}
return 0;
}
Version 2:
Code:
typedef struct{
int id;
int *Ary; // ->malloc
} Data;
void c_clicked(GtkButton *button, gpointer user_data){
Data *data = user_data;
printf(%i\n",data->Ary[data->id]);
}
void my_func( int anz, int *array){
...
Data data[anz];
GtkWidget c_button[anz];
for(int i=0,i<=anz, i++){
data[i].id= i;
data[i].Ary = array;
c_button[i] = gtk_button_new_with_label ("text");
g_signal_connect (c_button[i], "clicked", G_CALLBACK (b_clicked), &data[i]);
}
return 0;
}
Habe es jetzt direkt mit der Addresse des Arrayementes versucht also:
Code:
g_signal_connect (c_button[i], "clicked", G_CALLBACK (b_clicked), &array[i]);
und funktioniert, doch bringt Problem der konstanten Adresse mit sich.
Vielen Dank für Eure Unterstützung!
dml
Lesezeichen