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 tordu] [déclaration variable]


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Points : 17
    Points
    17
    Par défaut [Problème tordu] [déclaration variable]
    Bonjour, j'ai un problème étrange avec la déclaration d'une structure en C++. Cette structure, wfDesc, n'est composée que de quelques entiers.

    Je dois envoyer un pointeur vers cette structure à une fonction qui me la remplie avec les valeurs adéquates :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    status = AcqrsD1_readData(..., struct AqDataDescriptor *, ...);
    Mon problème est que, en fonction de l'endroit ou je déclare la structure, la fonction réagit différemment....
    Dans le programme ci-dessous, je déclare cette structure de trois façons différentes (*p_wfDesc1,wfDesc2 et wfDesc3).

    Fichier d'entête :
    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
    class MainWindow : public QMainWindow
    {
    Q_OBJECT
    
    public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    
    public slots:
    void LectureAcquisition();
    ...
    
    private:
    AqDataDescriptor *p_wfDesc1;
    AqDataDescriptor wfDesc2;
    ...
    }
    Fichier CPP :
    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
    MainWindow::MainWindow(QWidget *parent):QMainWindow(parent),ui(new Ui::MainWindow)
    {
    ...
    p_wfDesc1 =new AqDataDescriptor;
    ...
    }
    
    void MainWindow::LectureAcquisition(void)
    {
    AqDataDescriptor wfDesc3;
    
    // Read the channel 1 waveform samples
    status = AcqrsD1_readData(instrumentIDX, channel, &readParams,
    				waveFormArray ,&wfDesc3, &segDesc);
    .....
    }
    Le comportement est le suivant :
    • Lorsque j'utilise wfDesc3, tout va bien et la structure est remplie correctement.
    • Lorsque j'utilise wfDesc2, le premier champ n'est pas remplie mais les autres ont l'air d'être OK.
    • Lorsque j'utilise la version allouée dynamiquement, la zone mémoire pointée est remplie correctement mais l'adresse du pointeur est modifiée ! et je suis donc obligé de sauvegarder le pointeur avant l'appel à la fonction pour aller chercher les données....


    La fonction AcqrsD1_readData provient d'une bibliothèque écrite en C. Je travaille sous Qt Creator et sous linux Fedora.

    Si quelqu'un pouvait m'expliquer ce qu'il se passe,
    Cédric.

  2. #2
    Membre habitué Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Points : 185
    Points
    185
    Par défaut
    Bonsoir,
    voici quelques pistes :
    1. tu as un problème ailleurs qui fait que tu as un comportement indéterminé
    2. le code de la fonction modifie le pointeur dans certains cas (peu probable)
    3. la fonction est mal utilisée ou une erreur se produit, tu as testé si le statut est le même dans les 3 cas ?
    b Oo

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Salut,
    j'opterais bien pour la première solution. Le status est identique et OK dans les trois cas. De plus, je ne saisis pas bien comment il fait pour modifier le pointeur envoyé...

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/07/2007, 16h39
  2. Problème déclaration variable
    Par patou41000 dans le forum C++/CLI
    Réponses: 5
    Dernier message: 25/04/2007, 01h04
  3. problème déclaration variable dynamique
    Par piotrr dans le forum Tkinter
    Réponses: 1
    Dernier message: 24/04/2007, 16h16
  4. [Configuration] Problème de déclaration de variable en php5
    Par domray dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 11/04/2007, 01h22
  5. Réponses: 8
    Dernier message: 03/11/2006, 15h55

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