コンパイラ エラー C2229
型 'identifier' にサイズが 0 の無効な配列があります
構造体またはビット フィールドのメンバーに、最後のメンバーではないサイズ 0 の配列が含まれています。
構造体の最後のメンバーとしてサイズ 0 の配列を持つことができるため、構造体を割り当てるときは、そのサイズを指定する必要があります。
サイズ 0 の配列が構造体の最後のメンバーではない場合、コンパイラは残りのフィールドのオフセットを計算できません。
次の例では C2229 が生成されます。
// C2229.cpp
struct S {
int a[0]; // C2229 zero-sized array
int b[1];
};
struct S2 {
int a;
int b[0];
};
int main() {
// allocate 7 elements for b field
S2* s2 = (S2*)new int[sizeof(S2) + 7*sizeof(int)];
s2->b[6] = 100;
}