Pointeur de struct mal interprété
Bonjour,
J'utilise la struct suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
typedef struct
{
unsigned char t;
int a;
int b;
unsigned char e;
unsigned char f;
unsigned char g;
} t_montype;
.../...
void FonctionAppellee(t_montype *m)
{
..../....
}
void FonctionAppelante()
{
t_montype p;
// initialise les champs de p
.../...
// appelle FonctionAppellee
FonctionAppellee(&p); |
En fait, quand on regarde le contenu de la strcuture p AVANT l'appel, il est OK.
Quand on est dans FonctionAppellee, il n'est pas bon (mais la mémoire est OK). En fait, il semble que gcc ne voit pas la structure de la même manière... la mémoire est bonne, mais les m->e, m->a ... ne sont pas bons
Quand on sort de l'appel, il est OK à nouveau
Si je déplace les 3 unsigned char e, f, g après t, le problème disparaît
C'est très embêtant de devoir "penser" à aligner les structs, normalement, le compilateur nos décharge de ce travail.
Y'aurait-il une option de compilation qui perturberait ou qui manquerait ?
Merci
Résolu : Pointeur de struct :
Bonjour,
Il y avait un pragma pack(1) caché dans un include qui n'était pas compilé dans le même ordre entre les deux fichiers sources. Un source qui date de 20 ans :D :D :D
On utilisant un pragma pack push et pop, j'ai résolu le souci
Je clos.
Merci aux intervenants