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