Online Examples (C, C++)
Благодаря проекту Compiler Explorer вы можете быстро подготовить синтетические примеры C и C++ кода, и посмотреть, как на них поведёт себя анализатор PVS‑Studio.
Перед вами пример кода, содержащий две ошибки и демонстрирующий возможности PVS‑Studio в анализе потока данных.
Во-первых, код содержит опечатку, из-за которой в переменную 'a' дважды подряд записываются адреса двух выделенных буферов памяти. Это приводит к потере одного указателя, и анализатор предупреждает об утечке памяти. Ещё одно последствие опечатки – разыменование нулевого указателя внутри функции 'use'.
Во-вторых, память была выделена с помощью оператора 'new', а освобождается с помощью вызова функции 'free'.
Анализатор выдаёт предупреждения, выявляющие все эти дефекты:
- V522 Dereferencing of the null pointer 'p' might take place. The null pointer is passed into 'use' function. Inspect the first argument. Check lines: 7, 18.
- V773 The 'a' pointer was assigned values twice without releasing the memory. A memory leak is possible.
- V519 The 'a' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 14, 15.
- V611 The memory was allocated using 'new' operator but was released using the 'free' function. Consider inspecting operation logics behind the 'a' variable.
Другие примеры
Мы подготовили ещё несколько примеров, демонстрирующих различные диагностические возможности анализатора PVS‑Studio:
- Опасный макрос [C];
- Утечка памяти [C];
- Две ошибки выхода за границу буфера [C];
- Неожиданно: ошибка, связанна с HTML [C];
- Выход за границу массива [C++];
- Контейнер не изменяется [C++];
- Неожиданно получаем значение false [C++].
- Опечатка, которую сложно заметить на Code Revew [C++];
Вы можете как модифицировать предложенные нами примеры, так и составить совершенно новые.
Использование
Несколько вариантов того, что можно сделать с помощью online-запуска анализатора PVS‑Studio:
- Поэкспериментировать с диагностическими возможностями анализатора;
- Сгенерировать постоянную ссылку на пример срабатывания при помощи кнопки "Share" и прислать её другу или коллеге;
- При общении с нашей командой в поддержке можно подготовить полноценный пример кода, демонстрирующий проблему, и прислать его с помощью постоянной ссылки;
- Подготавливать наглядные примеры для статей, посвященных статическому анализу кода.
Чего не стоит пытаться делать:
- Сравнивать работу статических анализаторов на основании синтетических примеров. Анализаторы чувствительны к тому, как написаны короткие синтетические примеры кода, и работа на них может отличаться от того, как покажет себя анализатор на реальной кодовой базе. См. статью "Анализатор PVS-Studio на сайте godbolt.org и предостережение".
- Пытаться оценить, насколько анализатор PVS‑Studio подходит для вашего проекта. Самый лучший способ - скачать демонстрационную версию анализатора и провести анализ кодовой базы. Также напомним, что PVS‑Studio – это не только диагностики, но и развитая инфраструктура, интеграция с Visual Studio, Rider, TeamCity, PlatformIO, Azure DevOps, Travis CI, CircleCI, GitLab CI/CD, Jenkins, SonarQube и т.д.
Студентам и преподавателям на заметку
Compiler Explorer очень удобно использовать для выполнения коротких лабораторных работ по программированию. Можно написать код, проверить, что он компилируется, запустить его и увидеть результат работы. Затем можно создать ссылку и отправить для проверки преподавателю.
Теперь ко всему этому прибавилась ещё и возможность проверить код с помощью PVS‑Studio и тем самым познакомиться с методологией статического анализа. Мы знаем, что PVS-Studio активно бесплатно используется студентами и преподавателями. Теперь для тех, кто использует Compiler Explorer для обучения языку C и C++, применять PVS‑Studio станет совсем просто и удобно.