Anzeige:
Ergebnis 1 bis 10 von 10

Thema: for(i) g_signal_connect( ..., &i)

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177

    for(i) g_signal_connect( ..., &i)

    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
    Geändert von dml (14-10-2013 um 19:51 Uhr) Grund: i<4

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •