结合指针的算术表达式中的 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]。
我有以下代码:
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]。