다음을 통해 공유


컴파일러 오류 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;
}