Эта конкретная программа проверки статического анализа Coverity ищет две вещи: операцию, которая может переполниться на определенных значениях (примеры которых она попытается привести в объяснении), и небезопасное использование потенциально усеченного значения.
Пользовательский интерфейс показывает вам «события», которые объясняют, почему что-то было помечено. В руководстве описано, что означает каждое событие. Два события, которые вы ищете в вашем случае, это «усечение» или «переполнение» для первого события и «приемник переполнения» для второго события.
Фрагмент кода показывает, что строка, преобразованная в двойное число, умножается на константу, а затем присваивается другому двойному значению. Возможно, в этом нет никакой проблемы, однако заголовок дефекта «Переполненное возвращаемое значение» говорит нам о том, что у вас есть второе событие, когда вы возвращаете это значение из этой функции. Если вы возвращаете «значение» из этой функции, а возвращаемый тип не является двойным (может быть, это 32-битный тип), то у вас есть потенциальная ошибка в вашем коде (явно не с конкретными значениями, которые вы показываете, но если строка может быть гораздо большим значением). Если функция возвращает двойное значение, это означает ложное срабатывание анализа, и вы можете пометить его как таковое в пользовательском интерфейсе, чтобы дефект больше не отображался.
Не видя больше кода, трудно сказать, есть ли реальная проблема или нет, но помните, что статический анализ не может знать, какие значения во время выполнения (действительно ли строка постоянна или она считывается динамически?), но это почему он дает вам подробные события, а не просто сводку в одну строку — так вы сможете оценить вероятность возникновения реальной проблемы в этом коде.
Сказав все это, программа проверки не должна отслеживать поплавки, поэтому здесь определенно есть ошибка в Coverity. Так как я работаю на них, я зарегистрировал это как проблему, но не стесняйтесь сообщать об этом и в службу поддержки Coverity.
person
Asya Kamsky
schedule
25.03.2012
0
, который вы присваиваетеvalue
. Что произойдет, если вы измените строку наdouble value = 0.0;
? - person teukkam   schedule 23.03.2012