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