Задать вопрос
Андрей Карпов, DevRel, PVS-Studio.
Контакты
Местоположение
Россия, Тульская обл., Тула

Достижения

Все достижения (8)

Наибольший вклад в теги

Все теги (14)

Лучшие ответы пользователя

Все ответы (14)
  • Актуальна ли сейчас литература Рихтера (Win32 приложения)?

    Andrey2008
    @Andrey2008
    DevRel в PVS-Studio
    Смело читайте. Отличная книга.
    Ответ написан
    Комментировать
  • В чем мои ошибки в коде?

    Andrey2008
    @Andrey2008
    DevRel в PVS-Studio
    Не знаю касательно корректности алгоритма, но PVS-Studio обнаруживает 4 ошибки, из-за которых уже и так всё работает не так как надо.
    SetOfNumb(int a[]) {
    size = sizeof(a)-1;
    V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof (a)' expression. consoleapplication2017.cpp 37
    Оператор sizeof вычислят здесь размер указателя, а не массива. В результате, переменная size всегда будет равна 3 в 32-битной программе или 7 в 64-битной программе.

    Аналогично здесь:
    size = sizeof(a);
    V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof (a)' expression. consoleapplication2017.cpp 46

    И здесь:
    for (int i = 0, j = 0; i < sizeof(temp.arr); i++) {

    V604 It is odd that the number of iterations in the loop equals to the size of the 'temp.arr' pointer. consoleapplication2017.cpp 88

    Ещё происходит ошибка копирования:
    n = z;
    V1002 The 'SetOfNumb' class, containing pointers, constructor and destructor, is copied by the automatically generated operator=. consoleapplication2017.cpp 140
    Класс SetOfNumb сложный, выделяет память. Но при этом отсутствует operator =. В результате просто копируются члены класса, что приведёт к двойному освобождению памяти.
    Ответ написан
    5 комментариев
  • Является ли результат выражения UB?

    Andrey2008
    @Andrey2008
    DevRel в PVS-Studio
    Всё сложно, так как стандарт меняется.

    i = i++;  // Это было неопределённым поведением до C++17
    i = ++i;  // А это было неопределённое поведение до C++11
    p[i] = i++;  // Это было неопределённым поведением до C++17

    Ещё на эту тему см. V567.

    В общем, теперь всё ещё более запутано и фиг разберёшься. :)

    Что делать? А просто не надо писать такие конструкции. Даже если теперь они стали корректными. Они путают программиста, читающего код и заставляют задумываться. Не делайте так. И пользуйтесь анализаторам PVS-Studio. Он укажет на непроектные и плохо написанные фрагменты кода.
    Ответ написан
    1 комментарий
  • Что за конь?

    Andrey2008
    @Andrey2008
    DevRel в PVS-Studio
    Служба поддержки PVS-Studio тут как тут. Есть и другие единорожки и постепенно мы будем вводить их в эксплуатацию. Поясняю. Единорог с радугой символизирует сообщения PVS-Studio изливаемые им при анализе Си++ кода. Новость на эту тему. Рисует этих сипотяжек фрилансер Татьяна.
    Ответ написан
    Комментировать
  • Что за конь?

    Andrey2008
    @Andrey2008
    DevRel в PVS-Studio
    Кстати, с сегодняшнего дня преобразится и дистрибутив. :-)

    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (9)