Предупреждение - Подозрительное усечение в сочетании арифметического выражения с указателем - PullRequest
2 голосов
/ 10 октября 2011

Я делаю статический анализ кода (используя Gimpel PC-Lint) моего исходного кода.При анализе кода я получаю предупреждение «Подозрительное усечение в арифметическом выражении в сочетании с указателем».

Вот что говорится в отчете анализа: *

source \ interp.cpp (142):ошибка 679: (Предупреждение - Подозрительное усечение в арифметическом выражении в сочетании с указателем)

    py[ulIndex] = y[ulIndex+1] - y[ulIndex];

Здесь py, y - динамический массив типа данных double с тем же размером, но все же предупреждение появляется в анализе кода длястрока выше.

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

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 10 октября 2011

Это может быть связано с тем, что вы добавляете int к длинному без знака с помощью ulIndex+1 Try

py[ulIndex] = y[ulIndex+UL1]-y[ulIndex];

Или это может зависеть от того, как вы определили массивы py и y.

0 голосов
/ 10 октября 2011

правильный тип для индекса массива - size_t. Вы получаете предупреждение, потому что size_t(ulIndex+1) может быть нулем, а не size_t(ulIndex)+1

0 голосов
/ 10 октября 2011

Это может быть потому, что вы используете беззнаковое выражение в качестве индекса массива (или в результирующей арифметике указателей), причем IIRC должно быть выражением со знаком для большинства реализаций языка Си.

Стандарты Си не определяютдолжно ли индексное выражение быть подписанным или беззнаковым, но в большинстве (всех?) текущих реализаций C используются подписанные индексы.

РЕДАКТИРОВАТЬ:

Здесь есть ссылка на сообщение для вашей проверки здесь .Я думаю, что средство проверки предупреждает о неявном приведении от unsigned int до int, что может привести к потере информации.Попробуйте добавить явное приведение к int и посмотрите, изменится ли сообщение / исчезнет.

...