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 :

Segmentation fault après avoir fermé la fenêtre


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 10
    Par défaut Segmentation fault après avoir fermé la fenêtre
    Bonjour,

    Je dois faire une application en c qui utilise une fenêtre principal contenant un bouton qui génère une deuxième fenêtre. Mon problème est que lorsque la deuxième fenêtre est générée, si l'utilisateur décide de fermer la fenêtre principal avant la fenêtre secondaire, il obtient une faute de segmentation lors de la sortie du programme.

    Est-ce qu'il y a une solution pour empêcher la fermeture de la première fenêtre lorsque la seconde est active ?
    Sinon, est-ce qu'il y a une possibilité pour que le programme quitte proprement après fermeture de la fenêtre principale ?

    Merci d'avance !

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Les deux solutions que tu proposes sont possibles. Mais il serait bien que tu nous montres ton code source pour que l'on puisse t'aiguiller un peu plus.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 10
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Bonjour.

    Les deux solutions que tu proposes sont possibles. Mais il serait bien que tu nous montres ton code source pour que l'on puisse t'aiguiller un peu plus.
    Voici le code source du fichier qui crée la deuxième fenêtre, la création de la fenêtre se fait depuis la fonction get_wei et la fermeture dans la fonction get_wei_i
    https://github.com/Adebureaux/calcul...nternational.c

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 10
    Par défaut
    Est-ce que quelqu'un connaîtrai une solution pour résoudre mon problème ? De préférence il faudrait que j'arrive à freeze ma fenêtre principale lorsque ma seconde fenêtre est active.

  5. #5
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Désolé pour la réponse tardive, travail oblige.

    Le principe est de rendre une fenêtre "modale". C'est à dire lorsque la deuxième fenêtre s'ouvre il n'est pas plus possible d'activer la fenêtre parente tant que la deuxième fenêtre n'est pas fermée.
    Pour se faire tu as la fonction gtk_window_set_transient_for ();.

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 10
    Par défaut
    Ok merci beaucoup pour l'info, j'ai essayé d'appeler cette fonction mais je n'arrive pas à passer mon pointeur sur GtkWindow à la fonction qui doit utiliser gtk_window_set_transient_for().
    En gros j'appelle ma fonction qui devrait utiliser gtk_window_set_transient_for() via g_signal_connect, qui prend en paramètre un pointeur sur fonction avec G_CALLBACK, mais je ne peux pas passer mon pointeur sur GtkWindow à la fonction qui va appeler gtk_window_set_transient_for().
    Je reçois cette erreur :
    gtk_window_set_transient_for: assertion 'GTK_IS_WINDOW (window)' failed
    Pour schématiser :
    Dans main --> Je crée ma fenêtre principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    Je l'envoi à ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    geodis_international(grid, GTK_WINDOW(window));
    Dans geodis_international -->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect(calculate_button, "clicked", G_CALLBACK(get_price_i), window);
    Dans get_price_i --> Dans get_wei --> Je crée ma fenêtre secondaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window_wei = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    Puis j'appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_window_set_transient_for(GTK_WINDOW(window_wei), window);
    Selon moi le problème vient au moment ou je veux envoyer mon pointeur window à g_signal_connect, je ne trouve pas de solution pour pouvoir passer mon pointeur sur GtkWindow autrement. Auriez-vous une solution ?

    Merci d'avance !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recupérer un trace apres segmentation fault
    Par elraton dans le forum Linux
    Réponses: 2
    Dernier message: 06/08/2010, 15h36
  2. Réponses: 9
    Dernier message: 24/01/2008, 12h53
  3. Segmentation fault après malloc
    Par Nykoo dans le forum Bibliothèque standard
    Réponses: 2
    Dernier message: 16/12/2007, 17h08
  4. Réponses: 9
    Dernier message: 17/05/2007, 13h20
  5. Réponses: 1
    Dernier message: 20/11/2006, 14h04

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