C · Avançado · Inglês · Técnico
flexible array member
Último membro de uma struct declarado como array sem tamanho, como char dados[]. Permite alocar a struct e seus elementos variáveis em um único bloco de memória.
Onde usar
Muito usado em buffers e strings com cabeçalho: malloc(sizeof(struct) + n * sizeof(elem)). Um único free libera tudo.
Em código
struct buf {
size_t n;
char dados[]; // flexible array member
};
struct buf *b = malloc(sizeof *b + 16);
b->n = 16;Exemplos
A flexible array member keeps the header and the data in one allocation.
Um flexible array member mantém o cabeçalho e os dados em uma só alocação.
It must be the last member of the struct.
Ele precisa ser o último membro da struct.
Cuidado
Esquecer que sizeof da struct ignora o array flexível; o tamanho total é calculado à mão ao alocar.