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.