我正在进行源代码的静态代码分析(使用Gimpel PC-Lint)。在代码分析中,我收到一个警告“与指针结合的算术表达式中的可疑截断”。
以下是分析报告::
source \ interp.cpp(142):错误679 :(警告 - 与指针结合的算术表达式中的可疑截断)
py[ulIndex] = y[ulIndex+1] - y[ulIndex];
这里py,y是具有相同大小的数据类型double的动态数组,但仍然会在上面一行的代码分析中出现警告。
任何人都可以帮我解决这个问题吗?
提前致谢。
答案 0 :(得分:2)
这可能是因为您使用ulIndex+1
向无符号长整型添加了一个int
试试
py[ulIndex] = y[ulIndex+UL1]-y[ulIndex];
或者它可能取决于你如何定义py和y数组。
答案 1 :(得分:0)
可能是因为您使用无符号表达式作为数组索引(或在结果指针算术中),IIRC应该是大多数C实现的带符号表达式。
C标准没有定义索引表达式是签名还是无符号,但是大多数(全部?)当前的C实现都使用了签名索引。
编辑:
您的检查器here有一条消息参考。我认为检查员会警告从unsigned int
到int
的隐式演员,这可能会导致信息丢失。尝试向int
添加显式广播,并查看消息是否更改/消失。
答案 2 :(得分:0)
数组索引的correct类型为size_t
。您收到警告,因为size_t(ulIndex+1)
可能为零,而不是size_t(ulIndex)+1