[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:
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:
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:
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.