IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

Erreur de segmentation


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut Erreur de segmentation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine = (gpointer)gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(Combo2)->entry));
    Ce que j'ai beaucoup de mal à comprendre, c'est d'abord le cast (gpointer) vu que cette fonction retourne une chaîne de caractères et en plus, tu veux accèder à un widget inexistant !
    J'utilise La valeur retourner par la GTK_ENTRY. En faite j'ai fais un copier coller du parametere mis dans le g_signal_connect...

    Mais pourquoi cela est problèmatique???

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Mais ici c'est la sortie de gtk_entry_get_text qui entre jeu non celle de la macro ... cette fonction renvoie une chaine donc le cast c'est du n'importe quoi. De plus, le widget depuis lequel tu veux récupérer le texte n'est même pas initialisé d'où le plantage !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    Comment ca ma widget n'est pas initialisé???
    Je suis d'accord que pour le cast il ne sert a rien, c'est un copier-coller qui ma fait oublier de l'enlever mais pour l'initialisation de la widget je ne voit pas de koi tu parles???

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par insa59
    Comment ca ma widget n'est pas initialisé???
    Je suis d'accord que pour le cast il ne sert a rien, c'est un copier-coller qui ma fait oublier de l'enlever mais pour l'initialisation de la widget je ne voit pas de koi tu parles???
    Bin suffit de lire ton code pour être fixé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void copy_list(GtkWidget *Widget, gpointer Data)
    { 
      GtkWidget *Combo, *Combo1, *Combo2 = NULL;    
     int nb, j = 0;
     int a = 10001;
     float tab1[a]; 
     int c;
     
     
     FILE *fichier, *fb = NULL;  
     char *chaine;
     chaine = (gpointer)gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(Combo2)->entry));
    Après bin voilà, c'est normal que ca plante !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    attends je sais tu va encore sortir le fouet mais la tu vois bien que j'initialise mais combo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      GtkWidget *Combo, *Combo1, *Combo2 = NULL;
    Ou je dois avoir mal compris ce que tu ve me dire???

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par insa59
    attends je sais tu va encore sortir le fouet mais la tu vois bien que j'initialise mais combo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      GtkWidget *Combo, *Combo1, *Combo2 = NULL;
    Ou je dois avoir mal compris ce que tu ve me dire???
    ....

    Mettre à NULL c'est bien mais ca ne créé pas le widget. Ici oui (je me suis peut-être mal exprimé) le widget est initialisé à NULL donc rien quoi. Je crois que ce que tu as essayé de faire, c'est d'accéder au widget se trouvant sur ta fenêtre principale mais tu t'es un peu enmêlé les pinceaux
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #7
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    Oui c'est vrai mais j'ai toujours cette satané erreur
    erreur de segmentation

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par insa59
    Oui c'est vrai mais j'ai toujours cette satané erreur
    erreur de segmentation
    Bin si tu as résolu au moins cette ligne sache que dans d'autres en-dessous tu fait exactement la même chose, tu tente d'acceder à un widget non créé. Il faut que tu revois presque tout ton code du programme si tu veux faire de la programmation modulaire car dans ta fonction, les pointeurs sur tes supposés widgets valent NULL et toi tu essayes d'y accéder !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  9. #9
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    olala tt cela ce complique
    peux tu me dire ce qu"il faut changer please car la bien que c'est moi qui é fait le code je commence a etre perdu

    Merci

  10. #10
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Hé bien comme je te l'ai suggéré tout à l'heure, mettre tes widgets de la fenêtre dans une structure, structure bien entendu locale au main et c'est cette structure que tu passe comme dernier argument à tes g_signal_connect ce qui sera alors automatiquement retranscrit dans l'argument data, il te suffit alors de récupérer ce pointeur (en le mettant dans un pointeur du type de la structure) puis voilà, tu as accès à tes widget qui eux t'es sûr qu'ils sont créés...

    Je vois mal comment t'expliquer mieux que ca mais il faut mettre la main dans le camboui c'est tout. C'est clair que passer d'un programme avec un seul fichier à un projet modulaire demande pas mal de changement mais il faut les faire et ne pas bidouiller à droite et à gauche sous peine d'arriver à ton résultat
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  11. #11
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    ces ce que j'essaie de faire mais sans bien comprendre pkoi tt mettre ds une structure

  12. #12
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par insa59
    ces ce que j'essaie de faire mais sans bien comprendre pkoi tt mettre ds une structure
    Imagine une structure ayant quelques widgets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct
    {
       GtkWidget * p_win;
       GtkWidget * p_btn;
       GtkWidget * p_combo;
    }
    app;
    Tu as un seul callback pour ton bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void cb (GtkWidget * wid, gpointer data)
    Lors de son enregistrement pour le bouton tu passes l'adresse de ta structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    app my_app;
    ...
    /* Creation des widgets etc... */
    ...
    /* Enregistrement du callback au bouton: */
    g_signal_connect (G_OBJECT (my_app.p_btn), "clicked", G_CALLBACK (cb), (gpointer) &my_app);
    Dans ton callback, tu appels les autres fonctions faisant des traitements sur les autres widgets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void cb (GtkWidget * wid, gpointer data)
    {
       const char * chaine = NULL;
       app * my_app = data;
       ...
       chaine = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (my_app->p_combo)->entry));
    }
    Tu vois maintenant l'utilité ? Tu peux accéder facilement à ce qu'il te faut par le biais de toujours un seul pointeur ... celui vers ta structure !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  13. #13
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    d'accord franck

    je comprends mieux maintenant ce que tu veux faire .
    mais par contre pour le callback si j'appuye sur le bouton je vais devoir appeler plusieur fct en mm temps cela ne va pas poser pb???
    et si cest possibleon le code comment le g_signal_connetc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    g_signal_connect (G_OBJECT (my_app.p_btn), "clicked", G_CALLBACK (cb),??????, (gpointer) &my_app
    encore merci de ta patience

  14. #14
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Pourquoi tu veux ajouter un argument à g_signal_connect Comme je t'ai montré c'est tout, y'a rien d'autre à faire.

    Quant à appeler plusieures fonctions "en même temps" cela n'est pas possible, ce sera toujours l'une après l'autre quoi que tu fasses donc le mieux, c'est d'appeler tes fonctions qui récupèrent et vérifient les données entrées dans les widgets depuis ton callback du bouton, d'où ma proposition de mettre tes widgets dans une structure !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  15. #15
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    oui mais moi en appuyant sur le bouton valider le g_signal_connect dois aller se "reboucler" sur les fct permettant de recupere ls data des spin et ds list
    dc la je fais devoir faire plusieurs g_signal_connect pour le bouton, or tt a leure tu ma dit que c'est pa top

  16. #16
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par insa59
    oui mais moi en appuyant sur le bouton valider le g_signal_connect dois aller se "reboucler" sur les fct permettant de recupere ls data des spin et ds list
    dc la je fais devoir faire plusieurs g_signal_connect pour le bouton, or tt a leure tu ma dit que c'est pa top
    Mais je viens de te proposer d'appeler justement ces fonctions depuis ton unique callback du bouton ce qui est nettement mieux (sinon tout ce que je t'ai proposé n'aura servi strictement à rien) et cela ne changera rien quant au déroulement du programme vu que les fonctions sont tout de même appelées une par une. Tu appeles toutes ces fonctions depuis l'intérieur de ton callback ... y'a rien de compliqué là dedans
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  17. #17
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    d'accord je comprends tu veux que je creer une fct qui permettent de recuperer les data des spin et ds list. Je vois un peu plus clair
    Mm si cela ne va pas etre une partie de plaisirs car il fo remodifier le code

    En tt cas j'espere que cela reglera le pb de l'erreur de segmentation

  18. #18
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par insa59
    d'accord je comprends tu veux que je creer une fct qui permettent de recuperer les data des spin et ds list. Je vois un peu plus clair
    Mm si cela ne va pas etre une partie de plaisirs car il fo remodifier le code

    En tt cas j'espere que cela reglera le pb de l'erreur de segmentation
    Hé bien oui, ca fait du travail mais pour un programme mieux organisé et assez solide c'est le prix à payer ... d'ailleurs, le fait de devoir refaire certaines fonctions te permettra d'en revoir le code et donc peut-être même de résoudre tes problèmes

    En fait tu peux très bien garder tes fonctions actuelles mais il faut juste les modifier un ptit peu c'est tout. Par exemple, la fonction copy_list pourrait être transformée en:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void copy_list (GtkCombo * combo);
    etc...
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  19. #19
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    okie franck

    je te tiens de tt facon au courant

    merci

  20. #20
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par insa59
    okie franck

    je te tiens de tt facon au courant

    merci
    De rien ... bon codage
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

Discussions similaires

  1. Erreurs de segmentation !
    Par anti-conformiste dans le forum Applications et environnements graphiques
    Réponses: 16
    Dernier message: 18/10/2005, 11h11
  2. Erreur de segmentation
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 06/10/2005, 18h28
  3. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 13h42
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo