Участник массива с переменными границами задал с нулевым размером или один
Неправильный синтаксис членского размера массива с переменными границами происходит, когда вы не используете стандартный Синтаксис C, чтобы задать структуру с участником массива с переменными границами.
Начиная с C99 можно задать участника массива с переменными границами с незаданным размером. Например, desc является участником массива с переменными границами в этом примере:
struct record {
size_t len;
double desc[];
};struct record {
size_t len;
double desc[0];
};Если вы задаете участников массива с переменными границами при помощи нулевого размера или один, ваша реализация зависима компилятором. Для компиляторов, которые не распознают синтаксис, массив int размера, у каждого есть буфер для одной переменной int. При попытке записать вне этого буфера, можно столкнуться с проблемами, происходящими от доступа к массиву за пределы.
Если вы используете стандартный Синтаксис C, чтобы задать участника массива с переменными границами, ваша реализация является портативной через все компиляторы, соответствующие стандарту.
Чтобы реализовать участника массива с переменными границами в структуре, задайте массив незаданного размера. Структура должна иметь одного участника помимо массива, и массив должен быть последним членом структуры.
| Группа: хорошая практика |
Language:C (средство проверки, отключенное, если анализ работает на коде C90, обозначенном опцией -c-version c90), |
| Значение по умолчанию: 'off' |
Синтаксис командной строки:
FLEXIBLE_ARRAY_MEMBER_INCORRECT_SIZE |
| Влияние: низко |
Find defects (-checkers) | Hard-coded buffer size | Memory leak | Misuse of structure with flexible array member | Pointer access out of bounds | Unprotected dynamic memory allocation