SlideShare a Scribd company logo
PVS-Studio - статический анализатор, выявляющий ошибки в       Достаточно общих слов Нет рекламным текстам! Намного
                                                                                слов.                                                                                      WinDjView - быстрая и
исходном коде приложений на языке C/C++/C++0x. Можно           лучше о возможностях PVS-Studio расскажут примеры. Вот, что                                                 компактная программа для
выделить 3 набора правил, включенных в состав PVS
                                              PVS-Studio:      находит наш анализатор кода в некоторых приложениях.                                                        просмотра файлов формата
                                                                                                                                                                           DjVu.
   1. Диагностика 64-битных ошибок (Viva64)
   2. Диагностика параллельных ошибок (VivaMP)                                                       Return to Castle Wolfenstein -   V560 A part of conditional expression is always true: 0xA.
   3. Диагностика общего назначения                                                                  компьютерная игра, шутер от      xmlparser.cpp 45
                                                                                                     первого лица, разработанный
Инструмент PVS-Studio предназначен для разработчиков
               Studio                                                                                компанией id Software.           inline bool IsValidChar(int c) {
современных приложений и интегрируется в среду Visual Studio                                                                            return c == 0x9 || 0xA || c == 0xD || c >= 0x20 && c <= 0xD7FF
2005/2008/2010. При этом предоставляется удобный                                                                                         || c >= 0xE000 && c <= 0xFFFD
пользовательский интерфейс для анализа файлов, навигации по    V564 The '&' operator is applied to bool type value. You've probably      || c >= 0x10000 && c <= 0x10FFFF;
коду, получению справочной информации.
  ду,                                                          forgotten to include parentheses or intended to use the '&&'           }
                                                               operator. g_client.c 1534
                                                                                                                                      Опечатались и случайно написали "
                                                                                                                                                                      "0xA" вместо "c == 0xA".
                                                                                                                                                                                         0
                                                               #define SVF_CASTAI 0x00000010
                                                               if ( !ent
                                                                    !ent->r.svFlags & SVF_CASTAI )                                                                         FCE Ultra – открытый эмулятор
                                                                                                                                                                           приставки Nintendo
                                                               Забыты скобки. Вначале вычисляется подвыражение "  "!ent-                                                   Entertainment System.
                                                               >r.svFlags", а уже затем выполняется операция '&'.
                                                               >         ",

                                                                                                     Miranda IM - программа
                                                                                                     мгновенного обмена               V561 It's probably better to assign value to 'x' variable than to
                                                                                                     сообщениями.
                                                                                                     сообщениям                       declare it anew. Previous declaration: ines.cpp, line 960. ines.cpp
                                                                                                                                      962
                                                               V567 Undefined behavior. The 's' variable is modified while being
                                                               used twice between sequence points. ezxml.c 371                        fp = fopen(name,"wb");
                                                                                                                                      int x = 0;
                                                               while (*(n = ++s + strspn(s, EZXML_WS)) && *n != '>') {                if (!fp)
                                                                                                                                        int x = 1;
Работа с анализатором не требует предварительного изучения
документации и настройки. Анализатор готов к работе сразу же   Нет гарантии, что 's' будет увеличена перед вызовом функции
                                                               strspn().
                                                               strspn                                                                 Лишний раз объявили переменную 'x'. В результате эмулятор
после инсталляции.
                                                                                                                                      всегда считает, что ему удалось открыть файл.
Особенности PVS-Studio                                                                               Chromium - веб-браузер с
                                                                                                     открытым исходным кодом,
   •   интеграция с Visual Studio 2005/2008/2010;                                                    разработанный компанией
   •   поддержка систем непрерывной интеграции
                   истем                интеграции;                                                  Google. На основе Chromium
                                                                                                     создаётся браузер Google         TortoiseSVN — клиент для системы контроля версий Subversion.
   •   online-справка на русском и английском языке;
              справка
   •   документация в pdf;                                                                           Chrome.
                                                                                                                                      V547 Expression '* utf8CheckBuf == 0xC0' is always false. The value
   •   сохранение и загрузка результатов анализа;                                                                                     range of signed char type: [ 128, 127]. tortoiseblame.cpp 310
                                                                                                                                                                 [-128,
   •   работа на всех ядрах и процессорах;                     V554 Incorrect use of auto_ptr. The memory allocated with 'new []'
                                                                                                                                      (и ещё два предупреждения V547)
                                                                                                                                       и
   •   лидер в диагностике 64- -битных ошибок;                 will be cleaned using 'delete'. accessibility_win_browsertest.cc 171
   •   оценка сложности 64-битной миграции код
                             битной           кода;                                                                                   // check each line for illegal utf8 sequences.
   •   интерактивные фильтры;                                  auto_ptr<VARIANT> child_array(new VARIANT[child_count]);
                                                                                                                                      char * utf8CheckBuf = lineptr;
   •   удобная интеграция в командный процесс разработки;                                                                             while ((bUTF8)&&(*utf8CheckBuf)) {
   •   разметка текста программы для проверки только нового    Использовать auto_ptr для массивов нельзя. В деструкторе
                                                                                                                                       if ((*utf8CheckBuf == 0xC0)||
       кода.                                                   auto_ptr уничтожается только один элемент:
                                                               auto
                                                                                                                                           (*utf8CheckBuf == 0xC1)||
                                                               ~auto_ptr() { delete _Myptr; }
                                                               ~
                                                                                                                                           (*utf8CheckBuf >= 0xF5)) {
                                                                                                                                                 CheckBuf

                                                                                                                                      Не проверяем то, что хотели. Выражение всегда ложно.
Fennec Media Project -
                                    WinMerge — свободное ПО с                                                    универсальный медиа
                                                                                                                                медиа-плеер.
                                    открытым исходным кодом
                                    для сравнения и
                                    синхронизации файлов и
                                    директорий.                           V540 Member 'lpstrFilter' should point to string terminated by two 0
                                                                                        'lpstrFilter'
V530 The return value of function 'empty' is required to be utilized
                                                            utilized.     characters. windows.c 5309
DirActions.cpp 1307, 1308
                                                                          OPENFILENAME lofn;
if (diffpos == (UINT_PTR)SPECIAL_ITEM_POS)                                ...
{                                                                         lofn.lpstrFilter = uni("All Files (*.*)
                                                                                                            (*.*)0*.*");
  strLeft.empty();
  strRight.empty();                                                       Забыли, что в конце должно быть два нуля. Здесь и юнит-тесты
}                                                                         не помогут. Только ручное тестирование. Корректный вариант
                                                                                                                              вариант:
                                                                          lofn.lpstrFilter = uni("All Files (*.*)0*.*0");
                                                                          lofn
При определенном условии код должен очистить строки. Но
вместо std::string::clear(), случайно написали std::string::empty().
                                                                          Подробнее с инструментом PVS-Studio вы можете
                                    Notepad++ - свободный
                                    текстовый редактор с                  познакомиться на сайте http://www.viva64.
                                                                                           сайте:               64.com/ru/pvs-studio/
                                    подсветкой синтаксиса.
                                                                          Вы также можете скачать ознакомительную версию:
                                                                          http://www.viva64.com/ru/pvs-studio-download
                                                                          http                                download/                                       PVS-Studio
V512: A call of the memset function will lead to a buffer overflow or                                                                                    поиск ошибок в коде
underflow. DockingManager.cpp 60
                                                                          Контактная информация
                                                                                                                                                            C / C++ / C++0x
#define CONT_MAP_MAX 50
                                                                          ООО «СиПроВер»
int _iContMap[CONT_MAP_MAX];
                                                                          Сайт: www.viva64.com
...
                                                                          Электронная почта: support@viva64.com
memset(_iContMap, -1, CONT_MAP_MAX);
                   1,
                                                                          Юридический адрес:
Заполнили только часть массива, так как забыли умножить                   300027, г. Тула, ул. Металлургов, 70
                                                                                                            70-1-88
                                                                                                                                                 ООО «Системы программной верификации»
"CONT_MAP_MAX" на "sizeof(int
                           int)".
                                                                          Почтовый ящик:
                                    Newton Game Dynamics -                300027, г. Тула, а/я 1800
                                    популярный физический
                                    движок для симуляции                  Наш офис:
                                    физического поведения                 г. Тула, ул. Кутузова, 100, 7 этаж, офис 73
                                                                                                      7-й
                                    объектов окружающей среды.                                                                                              www.viva64.com
                                                                          Телефон: (4872) 38
                                                                                          38–59–95.
                                                                          Мы работаем с 9:00 до 18:00 по московскому времени.
V502 Perhaps the '?:' operator works in a different way than it was
expected. The '?:' operator has a lower priority than the '*' operator.
dgminkowskiconv.cpp 1061

den = dgFloat32 (1.0e-24f) *
 (den > dgFloat32(0.0f)) ? dgFloat32(1.0f) : dgFloat32(
                                             dgFloat32(-1.0f);

Приоритет оператора '?:' ниже, чем у оператора умножения '*'.

More Related Content

Similar to PVS-Studio

Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...
Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...
Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...
Tatyanazaxarova
 
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
Andrey Karpov
 
PVS-Studio, решение для разработки современных ресурсоемких приложений
PVS-Studio, решение для разработки современных ресурсоемких приложенийPVS-Studio, решение для разработки современных ресурсоемких приложений
PVS-Studio, решение для разработки современных ресурсоемких приложений
OOO "Program Verification Systems"
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
corehard_by
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
Andrey Karpov
 
Intel IPP Samples for Windows - работа над ошибками
Intel IPP Samples for Windows - работа над ошибкамиIntel IPP Samples for Windows - работа над ошибками
Intel IPP Samples for Windows - работа над ошибками
Tatyanazaxarova
 
Как команда PVS-Studio может улучшить код операционной системы Tizen
Как команда PVS-Studio может улучшить код операционной системы TizenКак команда PVS-Studio может улучшить код операционной системы Tizen
Как команда PVS-Studio может улучшить код операционной системы Tizen
Andrey Karpov
 
Урок 24. Фантомные ошибки
Урок 24. Фантомные ошибкиУрок 24. Фантомные ошибки
Урок 24. Фантомные ошибки
Tatyanazaxarova
 
Статический анализ как ответ на вопрос о повышении качества кода
Статический анализ как ответ на вопрос о повышении качества кодаСтатический анализ как ответ на вопрос о повышении качества кода
Статический анализ как ответ на вопрос о повышении качества кода
Andrey Karpov
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кодаAndrey Karpov
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода
Pavel Tsukanov
 
Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська
Tatyanazaxarova
 
Пояснения к статье про Copy-Paste
Пояснения к статье про Copy-PasteПояснения к статье про Copy-Paste
Пояснения к статье про Copy-Paste
Tatyanazaxarova
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
Tatyanazaxarova
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
Andrey Karpov
 
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...Статический анализ и написание качественного кода на C/C++ для встраиваемых с...
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...
Andrey Karpov
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибки
Platonov Sergey
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибки
Andrey Karpov
 
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
corehard_by
 
PVS-Studio, решение для разработки современных ресурсоемких приложений
PVS-Studio, решение для разработки современных ресурсоемких приложенийPVS-Studio, решение для разработки современных ресурсоемких приложений
PVS-Studio, решение для разработки современных ресурсоемких приложений
Tatyanazaxarova
 

Similar to PVS-Studio (20)

Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...
Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...
Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...
 
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
 
PVS-Studio, решение для разработки современных ресурсоемких приложений
PVS-Studio, решение для разработки современных ресурсоемких приложенийPVS-Studio, решение для разработки современных ресурсоемких приложений
PVS-Studio, решение для разработки современных ресурсоемких приложений
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 
Intel IPP Samples for Windows - работа над ошибками
Intel IPP Samples for Windows - работа над ошибкамиIntel IPP Samples for Windows - работа над ошибками
Intel IPP Samples for Windows - работа над ошибками
 
Как команда PVS-Studio может улучшить код операционной системы Tizen
Как команда PVS-Studio может улучшить код операционной системы TizenКак команда PVS-Studio может улучшить код операционной системы Tizen
Как команда PVS-Studio может улучшить код операционной системы Tizen
 
Урок 24. Фантомные ошибки
Урок 24. Фантомные ошибкиУрок 24. Фантомные ошибки
Урок 24. Фантомные ошибки
 
Статический анализ как ответ на вопрос о повышении качества кода
Статический анализ как ответ на вопрос о повышении качества кодаСтатический анализ как ответ на вопрос о повышении качества кода
Статический анализ как ответ на вопрос о повышении качества кода
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кода
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода
 
Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська
 
Пояснения к статье про Copy-Paste
Пояснения к статье про Copy-PasteПояснения к статье про Copy-Paste
Пояснения к статье про Copy-Paste
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
 
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...Статический анализ и написание качественного кода на C/C++ для встраиваемых с...
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибки
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибки
 
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
 
PVS-Studio, решение для разработки современных ресурсоемких приложений
PVS-Studio, решение для разработки современных ресурсоемких приложенийPVS-Studio, решение для разработки современных ресурсоемких приложений
PVS-Studio, решение для разработки современных ресурсоемких приложений
 

More from Tatyanazaxarova

Урок 27. Особенности создания инсталляторов для 64-битного окружения
Урок 27. Особенности создания инсталляторов для 64-битного окруженияУрок 27. Особенности создания инсталляторов для 64-битного окружения
Урок 27. Особенности создания инсталляторов для 64-битного окружения
Tatyanazaxarova
 
Урок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программУрок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программ
Tatyanazaxarova
 
Урок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибокУрок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибок
Tatyanazaxarova
 
Урок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структурУрок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структур
Tatyanazaxarova
 
Урок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данныхУрок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данных
Tatyanazaxarova
 
Урок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. ИсключенияУрок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. Исключения
Tatyanazaxarova
 
Урок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен даннымиУрок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен данными
Tatyanazaxarova
 
Урок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаУрок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметика
Tatyanazaxarova
 
Урок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединенияхУрок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединениях
Tatyanazaxarova
 
Урок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателейУрок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателей
Tatyanazaxarova
 
Урок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаУрок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметика
Tatyanazaxarova
 
Урок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвигаУрок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвига
Tatyanazaxarova
 
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументовУрок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
Tatyanazaxarova
 
Урок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числаУрок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числа
Tatyanazaxarova
 
Урок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибокУрок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибок
Tatyanazaxarova
 
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокУрок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибок
Tatyanazaxarova
 
Урок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном кодеУрок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном коде
Tatyanazaxarova
 
Урок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложенияУрок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложения
Tatyanazaxarova
 
Урок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурацииУрок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурации
Tatyanazaxarova
 
PVS-Studio научился следить за тем, как вы программируете
PVS-Studio научился следить за тем, как вы программируетеPVS-Studio научился следить за тем, как вы программируете
PVS-Studio научился следить за тем, как вы программируете
Tatyanazaxarova
 

More from Tatyanazaxarova (20)

Урок 27. Особенности создания инсталляторов для 64-битного окружения
Урок 27. Особенности создания инсталляторов для 64-битного окруженияУрок 27. Особенности создания инсталляторов для 64-битного окружения
Урок 27. Особенности создания инсталляторов для 64-битного окружения
 
Урок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программУрок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программ
 
Урок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибокУрок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибок
 
Урок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структурУрок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структур
 
Урок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данныхУрок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данных
 
Урок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. ИсключенияУрок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. Исключения
 
Урок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен даннымиУрок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен данными
 
Урок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаУрок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметика
 
Урок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединенияхУрок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединениях
 
Урок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателейУрок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателей
 
Урок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаУрок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметика
 
Урок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвигаУрок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвига
 
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументовУрок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
 
Урок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числаУрок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числа
 
Урок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибокУрок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибок
 
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокУрок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибок
 
Урок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном кодеУрок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном коде
 
Урок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложенияУрок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложения
 
Урок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурацииУрок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурации
 
PVS-Studio научился следить за тем, как вы программируете
PVS-Studio научился следить за тем, как вы программируетеPVS-Studio научился следить за тем, как вы программируете
PVS-Studio научился следить за тем, как вы программируете
 

PVS-Studio

  • 1. PVS-Studio - статический анализатор, выявляющий ошибки в Достаточно общих слов Нет рекламным текстам! Намного слов. WinDjView - быстрая и исходном коде приложений на языке C/C++/C++0x. Можно лучше о возможностях PVS-Studio расскажут примеры. Вот, что компактная программа для выделить 3 набора правил, включенных в состав PVS PVS-Studio: находит наш анализатор кода в некоторых приложениях. просмотра файлов формата DjVu. 1. Диагностика 64-битных ошибок (Viva64) 2. Диагностика параллельных ошибок (VivaMP) Return to Castle Wolfenstein - V560 A part of conditional expression is always true: 0xA. 3. Диагностика общего назначения компьютерная игра, шутер от xmlparser.cpp 45 первого лица, разработанный Инструмент PVS-Studio предназначен для разработчиков Studio компанией id Software. inline bool IsValidChar(int c) { современных приложений и интегрируется в среду Visual Studio return c == 0x9 || 0xA || c == 0xD || c >= 0x20 && c <= 0xD7FF 2005/2008/2010. При этом предоставляется удобный || c >= 0xE000 && c <= 0xFFFD пользовательский интерфейс для анализа файлов, навигации по V564 The '&' operator is applied to bool type value. You've probably || c >= 0x10000 && c <= 0x10FFFF; коду, получению справочной информации. ду, forgotten to include parentheses or intended to use the '&&' } operator. g_client.c 1534 Опечатались и случайно написали " "0xA" вместо "c == 0xA". 0 #define SVF_CASTAI 0x00000010 if ( !ent !ent->r.svFlags & SVF_CASTAI ) FCE Ultra – открытый эмулятор приставки Nintendo Забыты скобки. Вначале вычисляется подвыражение " "!ent- Entertainment System. >r.svFlags", а уже затем выполняется операция '&'. > ", Miranda IM - программа мгновенного обмена V561 It's probably better to assign value to 'x' variable than to сообщениями. сообщениям declare it anew. Previous declaration: ines.cpp, line 960. ines.cpp 962 V567 Undefined behavior. The 's' variable is modified while being used twice between sequence points. ezxml.c 371 fp = fopen(name,"wb"); int x = 0; while (*(n = ++s + strspn(s, EZXML_WS)) && *n != '>') { if (!fp) int x = 1; Работа с анализатором не требует предварительного изучения документации и настройки. Анализатор готов к работе сразу же Нет гарантии, что 's' будет увеличена перед вызовом функции strspn(). strspn Лишний раз объявили переменную 'x'. В результате эмулятор после инсталляции. всегда считает, что ему удалось открыть файл. Особенности PVS-Studio Chromium - веб-браузер с открытым исходным кодом, • интеграция с Visual Studio 2005/2008/2010; разработанный компанией • поддержка систем непрерывной интеграции истем интеграции; Google. На основе Chromium создаётся браузер Google TortoiseSVN — клиент для системы контроля версий Subversion. • online-справка на русском и английском языке; справка • документация в pdf; Chrome. V547 Expression '* utf8CheckBuf == 0xC0' is always false. The value • сохранение и загрузка результатов анализа; range of signed char type: [ 128, 127]. tortoiseblame.cpp 310 [-128, • работа на всех ядрах и процессорах; V554 Incorrect use of auto_ptr. The memory allocated with 'new []' (и ещё два предупреждения V547) и • лидер в диагностике 64- -битных ошибок; will be cleaned using 'delete'. accessibility_win_browsertest.cc 171 • оценка сложности 64-битной миграции код битной кода; // check each line for illegal utf8 sequences. • интерактивные фильтры; auto_ptr<VARIANT> child_array(new VARIANT[child_count]); char * utf8CheckBuf = lineptr; • удобная интеграция в командный процесс разработки; while ((bUTF8)&&(*utf8CheckBuf)) { • разметка текста программы для проверки только нового Использовать auto_ptr для массивов нельзя. В деструкторе if ((*utf8CheckBuf == 0xC0)|| кода. auto_ptr уничтожается только один элемент: auto (*utf8CheckBuf == 0xC1)|| ~auto_ptr() { delete _Myptr; } ~ (*utf8CheckBuf >= 0xF5)) { CheckBuf Не проверяем то, что хотели. Выражение всегда ложно.
  • 2. Fennec Media Project - WinMerge — свободное ПО с универсальный медиа медиа-плеер. открытым исходным кодом для сравнения и синхронизации файлов и директорий. V540 Member 'lpstrFilter' should point to string terminated by two 0 'lpstrFilter' V530 The return value of function 'empty' is required to be utilized utilized. characters. windows.c 5309 DirActions.cpp 1307, 1308 OPENFILENAME lofn; if (diffpos == (UINT_PTR)SPECIAL_ITEM_POS) ... { lofn.lpstrFilter = uni("All Files (*.*) (*.*)0*.*"); strLeft.empty(); strRight.empty(); Забыли, что в конце должно быть два нуля. Здесь и юнит-тесты } не помогут. Только ручное тестирование. Корректный вариант вариант: lofn.lpstrFilter = uni("All Files (*.*)0*.*0"); lofn При определенном условии код должен очистить строки. Но вместо std::string::clear(), случайно написали std::string::empty(). Подробнее с инструментом PVS-Studio вы можете Notepad++ - свободный текстовый редактор с познакомиться на сайте http://www.viva64. сайте: 64.com/ru/pvs-studio/ подсветкой синтаксиса. Вы также можете скачать ознакомительную версию: http://www.viva64.com/ru/pvs-studio-download http download/ PVS-Studio V512: A call of the memset function will lead to a buffer overflow or поиск ошибок в коде underflow. DockingManager.cpp 60 Контактная информация C / C++ / C++0x #define CONT_MAP_MAX 50 ООО «СиПроВер» int _iContMap[CONT_MAP_MAX]; Сайт: www.viva64.com ... Электронная почта: support@viva64.com memset(_iContMap, -1, CONT_MAP_MAX); 1, Юридический адрес: Заполнили только часть массива, так как забыли умножить 300027, г. Тула, ул. Металлургов, 70 70-1-88 ООО «Системы программной верификации» "CONT_MAP_MAX" на "sizeof(int int)". Почтовый ящик: Newton Game Dynamics - 300027, г. Тула, а/я 1800 популярный физический движок для симуляции Наш офис: физического поведения г. Тула, ул. Кутузова, 100, 7 этаж, офис 73 7-й объектов окружающей среды. www.viva64.com Телефон: (4872) 38 38–59–95. Мы работаем с 9:00 до 18:00 по московскому времени. V502 Perhaps the '?:' operator works in a different way than it was expected. The '?:' operator has a lower priority than the '*' operator. dgminkowskiconv.cpp 1061 den = dgFloat32 (1.0e-24f) * (den > dgFloat32(0.0f)) ? dgFloat32(1.0f) : dgFloat32( dgFloat32(-1.0f); Приоритет оператора '?:' ниже, чем у оператора умножения '*'.