Pull to refresh

Comments 24

А багрепорт уже создан? Интересно было бы посмотреть: исправят?

А сколько стоит лицензия?
About $60 for a developer per month
About $30 for a developer per month
Сколько будет стоить лицензия, чтобы поставить на билд-сервер, чтобы проверял автоматом после каждого пуша? 2,5 разработчика в команде, Qt, Linux.

Сразу отмечу, что мы не продаём лицензии для отдельных людей/серверов. Для маленьких команд (2,5 разработчика) можно использовать бесплатный вариант лицензирования. Если такой вариант не подходит для проекта, то предлагаем обсудить возможные варианты лицензирования в индивидуальном порядке.

Спасибо, попробую бесплатный вариант.
Мы не отдельные люди-серверы, у нас довольно большое предприятие, но именно на С++ разрабатывают 2,5 человека.
И не зная цен сложно убеждать начальство выделить деньги на лицензию.

UFO just landed and posted this here
UFO just landed and posted this here

Мне в студенчестве ещё первый начальник сказал — всегда теперь обращаю внимание. Сработало лучше мана :)
А вообще, кмк если бы чаще были последствия, то бы больше внимания обращали. А поскольку эта штука очень редко и в основном незаметно стреляет, никто и не замечает...

UFO just landed and posted this here
Почему существует только x64 версия PVS-Studio?
Занимаюсь embedded, для чего вполне хватает 4-ядерного AMD
Исчезающее малое количество разработчиков программируют в наши дни, используя для своей работы 32-битную ОС.
P.S. Прошу не спутать разработку приложений для 32-битных систем и собственно сам процесс работы (написания кода). Я про второе.
Спасибо за проверку Qt!
Дефект N74 — вроде бы всё ок, почему анализатор ругается?
  TCHAR *message = nullptr;
  FormatMessage(
    FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
    NULL, DWORD(comError.Error()), MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
    message, 0, NULL);

Как раз таки вызывается FormatMessageW и передаётся указатель на message.
Флаг FORMAT_MESSAGE_ALLOCATE_BUFFER говорит что message нужно инициализировать.
Вроде всё просто же?
(Уже написали ниже, что ошибка действительно есть, но не та, про которую написал анализатор).
Насчет FormatMessage(). Как написано в описании флага FORMAT_MESSAGE_ALLOCATE_BUFFER в этом случае нужно передавать не адрес буфера, а адрес указателя, куда будет помещен адрес буфера. Т.е. нужно передавать не message, а (LPTSTR)&message. В этом ошибка.
Qt вообще очень любят повсюду ставить инты (дефекты 94 и 95), по крайне непонятной причине…
Всегда было интересно, как работает проверка на «identical subexpressions»? Явно же не простым текстовым сравнением. Небось SMT solver'ы используете?
Solver-ы не используются. Обыкновенный код сравнения поддеревьев, учитывающий возможные перестановки операндов и понимающий, что A[0+1] и A[1] это одно и тоже. Ну и на самом деле всё немного сложнее :).
Да мы ко многим проектам возращаемся. Но без фанатизма. Про Qt забыли на 4.5 года, например.
Интересно, если посмотреть в тот же qimagescale.cpp, то там гораздо больше примеров V668, но PVS Studio на них не срабатывает. Дело в том, что проверка на nullptr после new происходит на сразу после new, а в коде вызывающем функцию, которая делает new а потом возвращает этот указатель. В общем, фич-реквест в PVS Stuido — научиться анализировать call stack для V668.
Кстати, Дефект N94 не является дефектом. Индекс действительно может быть отрицательным. И массив, в котором лезут в отрицательный элемент, на самом деле не массив, а наследник вектора, который перегружает operator[] чтобы обрабатывать этот случай.
Отрицательный индекс сигнала означает «все сигналы» что бы это ни значило…
Другой дело, что код запутанный выходит.

Дефект N13 — не то чтобы совсем дефект, скорее выбор программиста, который писал код или может код ревью делал
Из документации qstrlen:


A safe strlen() function.

Returns the number of characters that precede the terminating '\0', or 0 if str is nullptr.

На всякий случай посмотрел определение функции:


inline uint qstrlen(const char *str)
{ return str ? uint(strlen(str)) : 0; }
Sign up to leave a comment.