Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 警告--算术表达式与指针组合时出现可疑截断_C++_C_Static Analysis - Fatal编程技术网

C++ 警告--算术表达式与指针组合时出现可疑截断

C++ 警告--算术表达式与指针组合时出现可疑截断,c++,c,static-analysis,C++,C,Static Analysis,我正在对我的源代码进行静态代码分析(使用Gimpel PC-Lint)。在代码分析中,我得到一个警告“算术表达式中的可疑截断与指针相结合” 以下是分析报告的内容: source\interp.cpp(142):错误679:(警告--算术表达式中与指针结合的可疑截断) 这里py,y是数据类型为double的动态数组,大小相同,但在代码分析中仍会出现警告 有人能帮我弄清楚吗 提前感谢。这可能是因为您使用ulIndex+1将int添加到无符号long 试一试 或者,这可能取决于您如何定义py和y数组。

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

以下是分析报告的内容:

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

这里py,y是数据类型为double的动态数组,大小相同,但在代码分析中仍会出现警告

有人能帮我弄清楚吗


提前感谢。

这可能是因为您使用
ulIndex+1将int添加到无符号long
试一试


或者,这可能取决于您如何定义py和y数组。

这可能是因为您使用无符号表达式作为数组索引(或在生成的指针算术中),对于大多数C实现,哪个IIRC应该是有符号表达式

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

编辑:


有一个供您的检查器使用的邮件参考。我认为检查器会警告从
无符号int
int
的隐式转换,这可能会导致信息丢失。尝试向
int
添加显式强制转换,查看消息是否更改/消失。

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

它可能来自ulIndex+1。您是否在循环中执行此操作?什么是
ulIndex
?它是整数吗?系统是32位还是64位?如何定义py和y?ulIndex是无符号长整型(32位)变量。当然,它是一个循环。它是C++源文件(.cp),C++明确支持签名和无符号索引。您可以自由地混合它们,即使对于单个阵列也是如此。也就是说,
a[int(5)]+a[unsigned(6)]
是有效的。@MSalters:有趣!在32位架构下,在代码< > [0x8000 0] 的情况下,C++实现会发生什么?嗯,因为这只是int型,文字有类型<代码> int <代码>。假设数组足够大,则只返回
*(a+0x7fffffff)
。在16位系统上,
0x7fffffff
的类型为
long
,它仍然会返回
*(a+0x7fffffff)
(假设16位系统支持这么大的数组)[在那里潜行编辑]当0x8000000大于INT\u MAX时,它是一个类型为
无符号INT
的文本。没有任何区别,真的:您得到
*(a+0x8000000)
,再次假设
a
声明足够大,可以开始使用。@MSalters:
a
不过是一个指针,不是吗?指针大小是固定的,并且指针算法在大多数当前系统上是有符号的。我相信它仍然会溢出,你会得到一些意想不到的东西:你会得到一个“before”,而不是“
a
”之后的“内存位置”。
    py[ulIndex] = y[ulIndex+1] - y[ulIndex];
py[ulIndex] = y[ulIndex+UL1]-y[ulIndex];