En C (usando gcc) I puede declarar una struct longitud variable como a continuación:alloc una estructura con matriz de longitud cero usando nuevo
typedef struct ProtocolFrame
{
uint8_t op;
uint32_t address;
uint16_t size;
uint8_t payload[0];
} ProtocolFrame;
entonces puedo Alloc diferente del marco:
ProtocolFrame *frA;
ProtocolFrame *frB;
frA = malloc(sizeof(ProtocolFrame) + 50);
frB = malloc(sizeof(ProtocolFrame));
En FRA este ejemplo tiene un campo de carga útil tan grande como 50 bytes, y FRB no tiene carga útil
¿Puedo hacer lo mismo en C++ usando el nuevo operador?
Eso no es realmente lo mismo, porque al usar malloc, tiene una extensión de tamaño dinámico, mientras que esta tiene un tamaño estático. – Puppy
No necesita necesariamente 'std :: malloc'. Podría escribir 'new char [sizeof (ProtocolFrame) + 50];' pero no sé si eso garantiza la alineación. –
@Chris: ':: operator new (sizeof (ProtocolFrame) +50)' garantiza la alineación. –