Поделиться через


Ошибка компилятора C2229

Тип "идентификатор" имеет недопустимый массив нулевого размера

Замечания

Элемент структуры или битового поля содержит массив нулевого размера, который не является последним элементом.

Так как массив нулевого размера может быть последним элементом структуры, необходимо указать его размер при выделении структуры.

Если массив нулевого размера не является последним элементом структуры, компилятор не может вычислить смещение для оставшихся полей.

Example

В следующем примере создается 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;
}