2015-02-12 3 views
-1

У меня есть следующий код:предупреждения 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]); 
} 

, но я получил предупреждение пуха, как:

Suspicious Truncation in arithmetic expression combining with pointer 

Затем я изменил код

array[index*3 + 1u]; 

все еще получать предупреждения, может ли кто-нибудь помочь мне в этом?

+1

'array [something]' is 'int *', почему вы сравниваете его с 'int'? –

+0

Я не думаю, что это сравнение дает предупреждения – ratzip

+0

Можете ли вы объяснить, почему вы тестируете, если действительный указатель равен '3'? Указатель содержит адрес памяти. –

ответ

0

Попробуйте следующее:

1) изменить буквальные 3 до знака, как вы сделали для 1;

2) использование индексации в стиле 2D-массива: array [row] [col] вместо массива [row * col + 1].

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; 
} 
+0

Фактически массив имеет 128 × 3 элемента, но вы правы, код ratzip пропускает элемент 'array [0] [0]' (т. Е. Array [0]) и использует элемент с индексом 127 * 3 + 1, который не существует. – VolAnd

+0

Я отредактировал ответ, указав, что элементы первого измерения 'array' являются' int [3] 's –

+0

Возможно, необходимы разъяснения о' auto', 'begin' и' end' (C++ standard, и т. д.) – VolAnd