gpt4 book ai didi

c - C 中的指针和索引 - 出了什么问题?

转载 作者:行者123 更新时间:2023-11-30 20:09:42 25 4
gpt4 key购买 nike

更新:我得到确认,该行为是由于代码检查器中的错误造成的(请参阅回答#2的评论)

我正在尝试静态代码检查器,但它提示:

使用索引 [8,8] 访问数组指针“sensorConf”,该索引可能超出数组范围 [0,UNKNOWN] 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) 不仅提供了 1 个规则,还提供了 3 个规则,这些规则都表示存在数组访问越界的情况。现在,如果我删除 SS 结构中的第一个或第二个整数,警告就会消失。如果我将“iii”从 int(32 位,ARM cortex M4)更改为 int16_t,它也会消失。如果 struct SS 中的数组前只有 4 个字节,则不会出现警告。看起来像是检查器中的错误?

最佳答案

代码是安全的 - 只要 AWISIL_MAX_CALIB_PAIRS 大于零,指针将始终指向 signalOrig。在不知道 MISRA 规则 18.1c 的文本的情况下,我无法告诉您它是否符合规定。

静态检查器无法以编程方式验证是否符合此要求。该消息只是一个警告。

关于c - C 中的指针和索引 - 出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50380197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com