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 :
Mon problème est que, en fonction de l'endroit ou je déclare la structure, la fonction réagit différemment....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 status = AcqrsD1_readData(..., struct AqDataDescriptor *, ...);
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 :
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
18 class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = 0); ~MainWindow(); public slots: void LectureAcquisition(); ... private: AqDataDescriptor *p_wfDesc1; AqDataDescriptor wfDesc2; ... }
Le comportement est le suivant :
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); ..... }
- 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.
Partager