Гибкий массив представителя заданный с нулем или одним размером
Этот дефект возникает, когда вы не используете стандартный синтаксис C для определения структуры с гибким представителем массива.
Начиная с C99, можно задать представителя гибкого массива с неопределенным размером. Для образца, desc
является гибким представителем массива в этом примере:
struct record { size_t len; double desc[]; };
struct record { size_t len; double desc[0]; };
Если вы задаете гибкие представители массива при помощи размера zero или one, ваша реализация зависит от компилятора. Для компиляторов, которые не распознают синтаксис, int
массив размера 1 имеет буфер для одного int
переменная. Если вы пытаетесь записать за пределы этого буфера, можно столкнуться с проблемами, связанными с доступом к массиву вне границ.
Если вы используете стандартный синтаксис C, чтобы задать гибкий представитель массива, ваша реализация является портативной для всех компиляторов, соответствующих стандарту.
Чтобы реализовать гибкий представитель массива в структуре, задайте массив неопределенного размера. Структура должна иметь один представитель, кроме массива, и массив должен быть последним представителем структуры.
Группа: Хорошая практика |
Язык: 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