Erreur compilation structure

rt45 - 28 déc. 2024 à 16:39
 PierrotLeFou - 28 déc. 2024 à 18:54

Bonjour,

Ne pratiquant pas le C++ tous les jours (et mes cours de C++ à l'école remontent à loin...) je ne vois pas pourquoi le compilateur (gcc) à un problème avec cette structure provenant d'un pilote que je dois intégrer dans un petit projet diy :

typedef struct  {
  int16_t fctl;
  int16_t duration;
  uint8_t da;
  uint8_t sa;
  uint8_t bssid;
  int16_t seqctl;
  unsigned char payload[];
} __attribute__((packed)) WifiMgmtHdr;
error: flexible array member 'WifiMgmtHdr::payload' not at end of 'struct<unnamed>'
   64 |   unsigned char payload[];

Pourriez-vous m'éclairer de votre expertise ?

A voir également:

1 réponse

Ta définition:
  unsigned char payload[];
n'a aucune dimension.
Le compilateur ne sait pas combien de place réserver pour ce tableau. Il te demande donc de leplacer à la fin de la structure.
Ça risque tout de même de conduire à un comportement indéterminé si tu essaies de mettre quelque chose dans ce tableau.

Aussi, tu demandes de "packter" la structure et tu as compilé sur une machine 64 bits.

Avec ton 16+16+8+8+8+16, ça se compacte mal.

Le compilateur s'attend à ce que le tableau commence au début d'un groupe de 64 bits.

Il faudra sans doute interchanger le dernier 8 bits avec le dernier 16 bits et faire du "padding".

0