My Struct看起来像这样:
typedef struct storage {
char ***data;
int lost_index[];
int lost_index_size;
int size;
int allowed_memory_key_size;
int allowed_memory_value_size;
int memory_size;
int allowed_memory_size;
} STORAGE;
我得到的错误是"错误:灵活的数组成员不在结构"的末尾。我知道可以通过在struct的末尾移动int lost_index[]
来解决此错误。为什么灵活的数组成员需要位于struct的末尾?是什么原因?
由于这被认为是另一个问题的副本,实际上我没有找到我真正需要的答案,类似问题的答案没有描述原因它背后的编译器抛出错误我问约。
由于
答案 0 :(得分:8)
与函数参数中的数组声明不同,声明为struct
或union
的一部分的数组必须具有指定的大小(下面描述了一个例外)。这就是宣告
int lost_index[];
int lost_index_size;
不正确。
此规则的例外是所谓的"灵活的数组成员",这是在struct
末尾声明没有大小的数组。您必须将其放在struct
的末尾,以便可以将其内存与struct
本身一起分配。这是编译器可以知道所有数据成员偏移的唯一方法。
如果编译器允许在struct
中间使用灵活数组,则以size
,allowed_memory_key_size
和on开头的成员的位置将取决于您分配给lost_index[]
数组的内存。此外,编译器无法在必要时填充struct
以确保正确的内存访问。