Pull to refresh
508.3
Karma
62.4
Rating
Andrey Karpov @Andrey2008

DevRel

  • Followers 252
  • Following 87

30 лет ядру Linux: поздравление от PVS-Studio

Банальную ошибку

Ну это как посмотреть. Проблема остановки:

Проблема остановки (англ. Halting problem) — это одна из проблем в теории алгоритмов[1], которая может неформально быть поставлена в виде:

Даны описание процедуры и её начальные входные данные. Требуется определить: завершится ли когда-либо выполнение процедуры с этими данными; либо, что процедура всё время будет работать без остановки.

Алан Тьюринг доказал в 1936 году, что проблема остановки неразрешима на машине Тьюринга. Другими словами, не существует общего алгоритма решения этой проблемы.[2]

Красивая ошибка в реализации функции конкатенации строк

Да. Но как уже отметили, тогда уж надо ещё и умножение длины на sizeof для красоты писать.

Красивая ошибка в реализации функции конкатенации строк

Чисто теоретически, легче будет переделать на wchar_t.

Красивая ошибка в реализации функции конкатенации строк

Почему зря? Мне кажется, такой вариант смотрится лучше: (len1+len2+1)*sizeof(char). А до этого смешивалось понятие длины строк и размера терминально символа.

Красивая ошибка в реализации функции конкатенации строк

Согласен. Поменял в статье.

Конспектируем Книгу Rust:: Времена и функции

Интересно, PVS-Studio справится с такой задачей, что скажет Andrey2008?

К сожалению, пока нет. Выписал для будущих доработок dataflow.

Статический анализатор Detekt для Kotlin

Сейчас таких планов нет.

Современный C++ нас не спасет

Изучим, научим.

Теперь PVS-Studio ещё лучше знает, что за зверь такой – strlen

Спасибо за пример, что анализатор внимательнее человека :).

Анализатор знает, что в функцию free можно безопасно передавать NULL. Здесь он ругается не на то, что аргументом free является потенциально нулевой указатель.

Примечание. Да, анализатору не понравится, если в free чётко всегда передавать NULL. Это действительно подозрительно. Зачем так писать? Но здесь не этот случай.

Ошибка в том, что память может быть выделена с помощью оператора new[], а освобождается с помощью функции free.

Пример полезного комментария

А мне вот тоже слабо. Приведите пример адекватного названия.

Пример полезного комментария

Я не согласен в данном случае. Заводить функцию, это ещё 3-4 строчки кода, вместо 2 для комментария. При этом функция будет весьма странна. Она будет состоять только из вызова memcpy и называть её нужно очень длинно! Что-то в духе: printf_above_stripped_our_nonprintable_control_characters_put_them_back :). В противном случае, опять-таки будет непонятно, зачем эта функция нужна. Такое себе… Я считаю комментарий хорошим вариантом.

Или вы имеете в виду, в имя функции печати добавить информацию про непечатные символы? В этом случае, что-то тоже я не знаю как коротко дать ей название. И при таком подходе будет сложно догадаться, зачем memcpy, пока не прочитаешь код выше. Тоже так себе…

Пример полезного комментария

К сожалению, не могу дать ответ, так как не собирали эту информацию.

Пример полезного комментария

На мой взгляд статья сложна для восприятия. Я еле её прочитал и не уверен, что понял суть корректно. Правильно я понимаю, что суть сводится к следующему? Есть проверка вида A — B < C, где A, B, и C это переменные целочисленного типа. И это неправильно, так как возможно переполнение.

Такие конструкции ловить можно, но не факт, что это хорошая идея. Будет много бессмысленных срабатываний. А так вообще некоторые виды переполнения анализатор ловит.

Пример, как в PVS-Studio появляются новые диагностики

Здесь надо разделить понятие стиля программирования и рекомендаций статического анализатора для поиска ошибок. Мы, например, сами всегда используем фигурные скобки. Однако, если анализатор начнёт предупреждать про скобки в проекте, где придерживаются другого стиля, то это такое себе… Для этого есть анализаторы стиля кодирования. Ну или можно включить те-же MISRA диагностики и насладиться месяцами рефакторинга :).

Information

Rating
78-th
Location
Тула, Тульская обл., Россия
Works in
Date of birth
Registered
Activity