我有以下代码:
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];
仍然会收到警告,有人可以帮助我吗?
答案 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]。