Lint警告在算术表达式中结合指针的可疑截断

时间:2015-02-12 16:07:03

标签: c++ c arrays pointers lint

我有以下代码:

int array[128][3] = { /*lots of emelents there*/}

int* listIt = &array[0][0];

for(unsigned int index = 0 ; index < 128; index++)
{
   printf("%x", array[index*3 + 1]);
}

但是我得到了lint警告:

Suspicious Truncation in arithmetic expression combining with pointer

然后我将代码更改为

array[index*3 + 1u];

仍然会收到警告,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

Lint的警告是正确的,你将使用此代码索引越界。

这一行:printf("%x", array[index*3 + 1]);会看array[index * 3 + 1]。当index为44时,index * 3 + 1为133. array只有128 int[3]个元素超出范围。

您似乎正在尝试在int[]中打印每个array的开头地址。试试这个:

for(auto it = begin(array); it < end(array); ++it){
    cout << *it;
}

不确定,但您可能正在尝试打印内容,而不是int[3]中每个array的地址。如果是这样,你可以这样做:

for(auto it = begin(array); it < end(array); ++it){
    cout << (*it)[0] << ", " << (*it)[1] << ", " << (*it)[2] << endl;
}

答案 1 :(得分:0)

尝试以下方法:

1)将文字3改为无符号,就像你为1做的那样;

2)在2D数组样式中使用索引:array [row] [col]而不是array [row * col + 1]。