我有以下带有灵活数组成员的结构:
struct test {
size_t sz;
const char str[];
};
现在我想分配一些内存来连续放置这个结构(比如在数组中)。问题是一个声明,比如struct test test_arr[]
未定义的行为。6.7.2.1(p3)
:
具有多个命名成员的结构的最后一个成员可能具有不完整的数组类型;这样的结构(以及任何可能递归地包含此类结构的成员的联合)不应是结构的成员或数组的元素。
我们知道,返回的指针malloc
可以转换为指向任何具有基本对齐方式的对象类型的指针。考虑以下代码:
void *obj= malloc(100 * sizeof(struct test)); //enough memory
struct test *t1 = obj;
t1 -> sz = 2;
t1 -> str = {'a', 'b'};
struct test *t2 = (void *) (((char *) obj) + sizeof(struct test) + sizeof(char[2])); // non conforming
这样做的合规方式是什么?