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

Lint warning Suspicious Truncation in arithmetic expression combining with pointer

我有以下代码:

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];

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

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

行:printf("%x", array[index*3 + 1]); 会看array[index * 3 + 1]。当index为44时,index * 3 + 1为133。array只有128个int[3]元素,这是越界的。

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

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

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

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

尝试以下操作:

1) 将文字 3 更改为无符号,就像您对 1 所做的那样;

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