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

C Discussion :

Problème avec les membres d'une structure


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de doderic
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 215
    Par défaut Problème avec les membres d'une structure
    SAlut à tous,
    J'ai un problème bizarre que je n'ai jamais eu et que j'aimerais comprendre. J'écris un programme en C(avec GTK), un programme censé être big mais je ne suis qu'au début. J'ai une structure qui contient tous les variables dont j'ai besoin l'interface graphique principale. Ainsi dans le main je déclare un pointerur sur cette strucure que j'alloue et avec lequel j'accède aux membres de la structure. jusque là tout va bien. Mon problème est le suivant. Au fur et à mesure que j'utilise les variables (de la structure), les autres ne marchent plus. je veux dire par là qu'après un certain nombre qui ont marché, il ya d'autres que j'utilise et qui ne marche plus. La compilation se fait sans problème mais le programme ne s'exécute pas. ça ne se lance même pas.

    Pour essayer de résoudre, j'ai redéclaré les autres variables (donc inutilisables) en local et là ça marche. Pourquoi celà, c'est dû à quoi? J'espère que je me suis fait comprendre. Si quelqu'un sait ce que c'est merci de me le dire

    Bonne suite à tous!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 48
    Par défaut
    Bonjour,

    Peut etre pourront nous avoir un peu de code ?

    Parce que la c'est tres difficile de cerner le probleme

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par doderic Voir le message
    Pour essayer de résoudre, j'ai redéclaré les autres variables (donc inutilisables) en local et là ça marche. Pourquoi celà, c'est dû à quoi? J'espère que je me suis fait comprendre.
    Pas vraiment... Ce que tu as écrit n'a pas beaucoup de sens... On dirait qu'il y a un débordement de mémoire ou que tu utilises une zone mémoire trop petite... Bref, poste ton code.

  4. #4
    Membre confirmé Avatar de doderic
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 215
    Par défaut
    Slt! En fait je ne voyais pas trop l'utilité de poster le code mais si ça peut servir alors le voici en dessous mais avant ça pour répondre à Emmanuel:
    Doderic a dit:
    Pour essayer de résoudre, j'ai redéclaré les autres variables (donc inutilisables) en local et là ça marche. Pourquoi celà, c'est dû à quoi? J'espère que je me suis fait comprendre.
    Emmanuel a répondu
    Pas vraiment... Ce que tu as écrit n'a pas beaucoup de sens... On dirait qu'il y a un débordement de mémoire ou que tu utilises une zone mémoire trop petite... Bref, poste ton code.
    Voilà ce que je veux dire par là: étant donné qu'en utilsant les autres membres de la structure le programme ne s'éxécute plus, il a fallu que je définne des variables en locale dans la fonction pour créer les widgets que je voulais et là le programme continue de s'éxécuter.

    Pour le code:
    - la structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    struct ihm{
           GtkWidget *menubar;
           GtkWidget *menu;
           GtkWidget *menuitem;
           GtkWidget *toolbar;
           GtkWidget *main_vbox;
           GtkWidget *main_window;
           GtkWidget *hbutton[2];
           GtkWidget *otr_hbutton;
           GtkWidget *but_hbutton[8];
           GtkWidget *combobox_but[2];
           GtkWidget *hpaned;
           GtkWidget *main_notebook;
           GtkWidget *scrolledwindow;
           GtkWidget *tree;
           GtkListStore *liststore;
           GtkTreeViewColumn *column;
           GtkTreeIter iter;
           GtkCellRenderer *render;
           GtkWidget *mainframe;
           GtkWidget *mframe_vbox;
     
    //GtkWidget *alignment;
    //GtkWidget *client_img;
    //GtkWidget *ajou_but;
    //GtkWidget *but_hbox;
     
            GtkWidget *rechbutton;
     
           GtkWidget *rechframe;
           GtkWidget *rechframe_entry;
     
           GtkWidget *stbar_label;
           GtkWidget *hseparator;
           GtkWidget *rechframe_vbox;
           GtkTreeSelection *selection;
           guint idContextId1=0;
           guint idContextId2=0;
     
    };
    une partie du code la fonction creer_contenu_milieu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    GtkWidget *but_img=gtk_image_new_from_stock("gtk-apply",GTK_ICON_SIZE_BUTTON);
         GtkWidget *but_hbox=gtk_hbox_new(FALSE,2);
         GtkWidget *alignment=gtk_alignment_new(0.5,0.5,0,0);;
         GtkWidget *ajout_but=gtk_button_new();
         gtk_box_pack_start(GTK_BOX(p->mframe_vbox),ajout_but,FALSE,FALSE,20);
         GtkWidget *but_label=gtk_label_new("Ajouter le Client");
     
         gtk_container_add(GTK_CONTAINER(ajout_but),alignment);
         gtk_container_add(GTK_CONTAINER(alignment),but_hbox);
         //...
    Dans le main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct ihm *p=g_malloc(sizeof(struct ihm));
     
        gtk_init(&argc,&argv);
        //...    
        creer_menu(p);
        creer_barre_outils(p);
        creer_contenu_milieu(p); // La fonction ou le problème a commencé
     
        //...    
    g_free(p);
    En exemple regardez les variables que j'ai mis en commentaire, il a fallu que je redéfinisse d'autres variables (en local) dans la fonction pour faire ce qu'ils doivent faire. C'est pareil pour tous les autres variables que je n'ai pas encore utilisées. Je rappelle le problème. ça compile mais le programme ne s'éxécute pas. pourtant j'ai alloué la structure. Bien! j'espère que j'ai été plus clair sinon faites le moi savoir, je veux bien savoir à quoi c'est dû.

    Bonne suite

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    As-tu essayé de debugger en pas à pas ton code? Par ce qu'avec les bribes d'information que tu donnes, cela ressemble effectivement à un problème d'adressage.

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par doderic Voir le message
    Pour le code:
    Dans le code que tu as posté, on ne voit pas comment sont initialisés les champs de la structure.

    Nota : Il n'est pas utile de définir la structure de façon dynamique. Comme elle est d'une taille raisonnable, elle peut très bien être définie en automatique dans le main() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    struct ihm ihm = {0};
     
        gtk_init(&argc,&argv);
        //...    
        creer_menu(&ihm);
        creer_barre_outils(&ihm);
        creer_contenu_milieu(&ihm); // La fonction ou le problème a commencé
     
        //...

  7. #7
    Membre confirmé Avatar de doderic
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 215
    Par défaut
    Hi tout le monde. Emmanuel j'ai essayé le code que t'as proposé et figure toit que ça donne le même résultat que le problème que j'ai et quand j'ai alloué de nouveau la structure comme je l'avais fait ça a marché mais mon blème à moi subsiste. En fait ça m'a fait pensé qu'il y a un problème d'insuffisance de mémoire. J'ai une question concernant ce que Emmanuel a dit. Quand d'après toi faut-il alors penser à allouer une structure si tu trouve que le mien n'a pas forcément besoin d'être alloué? J'espère ta réponse . Bonne suite!

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par doderic Voir le message
    Quand d'après toi faut-il alors penser à allouer une structure si tu trouve que le mien n'a pas forcément besoin d'être alloué
    Quand la structure dépasse une 'taille raisonnable'.

    La notion de 'taille raisonnable' pour une variable automatique dépend de l'architecture. Disons 10% de la taille max de la pile.

    Après il faut voir les caractéristiques de l'architecture. A la louche, la taille de la pile allouée par processus est :
    • DOS : 10 ko
    • Windows : 100 ko
    • NT/unixoïdes 1 Mo

    etc.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Août 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 7
    Par défaut
    slt, je voi pas l'utilité d'utiliser des variables dynamique dans la structure.
    la notion pointeur dans le C n'est pas de tout facile donc je croi que c'est un problém d'adressage en + il faut l'exécution pas à pas pour localiser le problém (quelles variables ne fonctionne pas correctement?)

  10. #10
    Membre confirmé Avatar de doderic
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 215
    Par défaut
    Slt! Justement je n'utilise pas de variable dynamique dans la structure. Ce ne sont que des pointeurs sur GtkWidget qu'il ya dedans. Et tu me dis d'exécuter pas à pas pour aboutir à quoi finalement? Quand à ta question "quelles variables ne fonctionne pas correctement?", je les connais mais j'en fais quoi? Ton approche de solution n'est pas clair du tout et ne dis rien de grand.

    Pour Emmanuel:
    Si je prends les infos que tu me donnes, comment je fais alors pour savoir la taille qu'une structure de mon genre contenant des Widget peut prendre en mémoire pour que je sache quand l'allouer? A+

  11. #11
    Membre confirmé Avatar de doderic
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 215
    Par défaut
    Au fait j'ai dis que je pensais que ça doit être un problème d'insuffisance de mémoire. Et si c'était vrai comment ça se fait et le résoudre? ce n'est qu'un avis. Si vous avez autre chose à me proposer, je suis partant

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

Discussions similaires

  1. [VBA]Problème avec les critères d'une recherche de fichier
    Par lucho013 dans le forum VBA Access
    Réponses: 3
    Dernier message: 16/04/2007, 23h40
  2. [Système] Problème avec les méthodes d'une classe
    Par oussama127 dans le forum Langage
    Réponses: 7
    Dernier message: 30/08/2006, 09h18
  3. Problème avec les indexes sur une base de données.
    Par osoudee dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/02/2006, 09h24
  4. initialiser les membres d'une structure
    Par molesqualeux dans le forum C
    Réponses: 8
    Dernier message: 02/02/2006, 19h57
  5. [Débutant] Problème avec les paramètres d'une proc stockée
    Par babulior dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/06/2005, 15h38

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