考虑一个包含灵活数组成员的结构,如下所示:
typedef struct {
size_t len;
char data[];
} Foo;
我有一个未知数量的 Foo,每个都是未知大小,但是我可以确定我所有的 Foo 加起来正好是 1024 字节。如何在知道每个 Foo 的长度之前为一个 Foos 数组分配 1024 个字节,然后再填充该数组的成员?
像这样的东西,虽然它抛出了一个段错误:
Foo *array = malloc(1024);
int array_size = 0;
Foo foo1;
strcpy(foo1.data, "bar");
array[0] = foo1;
array_size++;
Foo foo2;
strcpy(foo2.data, "bar");
array[1] = foo2;
array_size++;
for (int i = 0; i < array_size; i++)
puts(array[i].data);
想要这样做的原因是将所有 Foos 保持在一个连续的内存区域中,以便 CPU 缓存友好。