Гибкий массив представителя заданный с нулем или одним размером
Этот дефект возникает, когда вы не используете стандартный синтаксис 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