错误:灵活的数组成员不在结尾

时间:2016-05-11 13:36:18

标签: c arrays struct

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的末尾?是什么原因?

由于这被认为是另一个问题的副本,实际上我没有找到我真正需要的答案,类似问题的答案没有描述原因它背后的编译器抛出错误我问约。

由于

1 个答案:

答案 0 :(得分:8)

与函数参数中的数组声明不同,声明为structunion的一部分的数组必须具有指定的大小(下面描述了一个例外)。这就是宣告

的原因
int lost_index[];
int lost_index_size;

不正确。

此规则的例外是所谓的"灵活的数组成员",这是在struct末尾声明没有大小的数组。您必须将其放在struct的末尾,以便可以将其内存与struct本身一起分配。这是编译器可以知道所有数据成员偏移的唯一方法。

如果编译器允许在struct中间使用灵活数组,则以sizeallowed_memory_key_size和on开头的成员的位置将取决于您分配给lost_index[]数组的内存。此外,编译器无法在必要时填充struct以确保正确的内存访问。