警告 - 与指针组合的算术表达式中的可疑截断

时间:2011-10-10 08:50:35

标签: c++ c static-analysis

我正在进行源代码的静态代码分析(使用Gimpel PC-Lint)。在代码分析中,我收到一个警告“与指针结合的算术表达式中的可疑截断”。

以下是分析报告::

source \ interp.cpp(142):错误679 :(警告 - 与指针结合的算术表达式中的可疑截断)

    py[ulIndex] = y[ulIndex+1] - y[ulIndex];

这里py,y是具有相同大小的数据类型double的动态数组,但仍然会在上面一行的代码分析中出现警告。

任何人都可以帮我解决这个问题吗?

提前致谢。

3 个答案:

答案 0 :(得分:2)

这可能是因为您使用ulIndex+1向无符号长整型添加了一个int 试试

py[ulIndex] = y[ulIndex+UL1]-y[ulIndex];

或者它可能取决于你如何定义py和y数组。

答案 1 :(得分:0)

可能是因为您使用无符号表达式作为数组索引(或在结果指针算术中),IIRC应该是大多数C实现的带符号表达式。

C标准没有定义索引表达式是签名还是无符号,但是大多数(全部?)当前的C实现都使用了签名索引。

编辑:

您的检查器here有一条消息参考。我认为检查员会警告从unsigned intint的隐式演员,这可能会导致信息丢失。尝试向int添加显式广播,并查看消息是否更改/消失。

答案 2 :(得分:0)

数组索引的correct类型为size_t。您收到警告,因为size_t(ulIndex+1)可能为零,而不是size_t(ulIndex)+1