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

Str*_*rić 8 c arrays struct

我的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;
Run Code Online (Sandbox Code Playgroud)

我得到的错误是"错误:灵活的数组成员不在结构的末尾".我知道这个错误可以通过int lost_index[]在结束时移动来解决.为什么灵活的数组成员需要位于struct的末尾?是什么原因?

因为这被认为是另一个问题的副本,实际上我没有找到我实际需要的答案,类似问题的答案没有描述编译器抛出错误的原因我问的问题.

谢谢

das*_*ght 9

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

int lost_index[];
int lost_index_size;
Run Code Online (Sandbox Code Playgroud)

是不正确的.

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

如果编译器,以允许在一个中间柔性阵列struct,成员的位置开始size,allowed_memory_key_size和上,将依赖于存储器,你分配给量lost_index[]阵列.此外,编译器将无法填充struct必要的位置以确保正确的内存访问.