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 d'accès à un tableau de pointeur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Par défaut Problème d'accès à un tableau de pointeur
    Hello !

    ça fait plus de 2h que je me prends le chou sur un truc tout bête...
    Dans le constructeur d'une classe je définis des pointeurs sur des QPushButton, puis pour y accèder plus facilement je met tous mes pointeurs dans un tableau.
    Quand dans une fonction de cette classe, j'essaye d'accèder au tableau de pointeurs (qui est un attribut de la classe) j'obtiens un segmentation Fault
    Je ne dois plus trop avoir les yeux en fasse des trous !

    Voici mes déclarations de pointeurs sur QPushButton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	QPushButton *menuLights = new QPushButton(insideWidget);
    	QPushButton *menuTemp = new QPushButton(insideWidget);
            ...
    Voici ma création de tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	QPushButton *pt_button[] = {menuLights, menuTemp, menuAudio, menuWater, menuDoors, menuAlert};
    	pt_tab_button = (QPushButton **) pt_button;
    Enfin je fais des sorties console pour analyser les adresses:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    qDebug() << pt_tab_button[0] << " " << pt_tab_button[1];
    qDebug() << "add of pt_tab_button: " << pt_tab_button;
    Ce qui me donne
    QPushButton(0x91578) QPushButton(0x91770)
    add of pt_tab_button: 0xbe8c9b44

    Dans une fonction de ma classe, j'essaye d'utiliser pt_tab_button
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qDebug() << pt_tab_button; // 0xbeb38b44 it means the address is good !!!
    Mon tableau à la bonne adresse.

    Mais dès que j'essaye de sélectionner un élément dedans, via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qDebug() << pt_tab_button[0]; // Segmentation Fault
    J'obtiens un problème mémoire

    Si vous avez des idées car la je sèche

    Merci

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    Peut-on voir plus en détail ta définition de classe, ton constructeur et la méthode où se déclenche la segfault ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Par défaut
    Le problème est résolu, il fallait déclarer le tableau non pas dans le cpp mais plutôt dans le header avec une taille fixe:

    extrait constructeur cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	QPushButton *pt_button[] = {menuLights, menuTemp, menuAudio, menuWater, menuDoors, menuAlert}; // Don't work !!!
     
    	tab_button[0] = menuLights; // work
    	tab_button[1] = menuTemp; // work
    	tab_button[2] = menuAudio; // work
    	tab_button[3] = menuWater; // work
    	tab_button[4] = menuDoors; // work
    	tab_button[5] = menuAlert; // work
    extrait h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	QPushButton **pt_tab_button; // not known as an array
    	QPushButton *tab_button[10]; // great !!
    extrait cpp de la méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	maxButton = nbButton * (tab_button[0]->width() + offsetButton); // great !!
    	maxButton = nbButton * (pt_tab_button[0]->width() + offsetButton); // Segmentation Fault
    ==> RESOLU

    Merci cob59, ta question m'a mis sur la bonne voie

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/09/2011, 14h26
  2. Problème d'accès à un tableau
    Par sliders_alpha dans le forum C
    Réponses: 1
    Dernier message: 08/02/2009, 17h23
  3. Problème de tableau de pointeurs
    Par befast dans le forum C++
    Réponses: 19
    Dernier message: 05/10/2006, 15h22
  4. Accès le plus rapide: Pointeur ou tableau?
    Par homeostasie dans le forum C
    Réponses: 21
    Dernier message: 01/09/2006, 14h08
  5. [GCC] Tableau de pointeurs pour accès multiples en asm
    Par Flo. dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 12/12/2005, 08h47

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