Участник массива с переменными границами задал с нулевым размером или один
Неправильный синтаксис членского размера массива с переменными границами происходит, когда вы не используете стандартный Синтаксис 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