Обновление: я получил подтверждение того, что поведение связано с ошибкой в программе проверки кода (см. Комментарий к ответу № 2)
Я пробую статическую программу проверки кода, и она жалуется:
Доступ к указателю массива `sensorConf 'осуществляется с помощью индекса [8,8], который может выходить за границы массива [0, НЕИЗВЕСТНО] MISRAC2012-Rule-18.1_d
Код:
typedef struct
{
int16_t signalOrig;
} TT;
typedef struct
{
int iii; // <-- see below: int16_t iii would work without warning!
uint16_t numCalibPairs;
TT calib[5];
} SS;
void Test(const SS* sensorConf);
void Test(const SS* sensorConf)
{
const int16_t f = sensorConf->calib[0].signalOrig;
}
Я спросил: почему он говорит "Указатель массива"?Почему он считает, что индекс [8,8]?Это просто проблема проверки кода или проблема с моим кодом?
Редактировать: Проверка кода (C-STAT) дает не только одно, но и 3 правила, все из которых имеют значение, что существуетДоступ за пределы массива.Теперь, если я удаляю первое или второе целое число в структуре SS, предупреждение исчезает.Он также исчезает, если я изменяю «iii» с int (32-битная, ARM cortex M4) на int16_t.Предупреждение не появляется, если перед массивом в структуре SS есть только 4 байта.Похоже на баг в шашке?