Кресты / Говнокод #28846 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
char *SomeGlobalPointer {};

void foo()
{
  SomeGlobalPointer = new char[1024];
}

int main()
{
  foo();

  if (!SomeGlobalPointer)
  {
    delete[] SomeGlobalPointer;
  }

  return 0;
}

Отсюдова:

https://pvs-studio.ru/ru/blog/posts/cpp/1068/

Запостил: CEHT9I6PbCKuu_nemyx CEHT9I6PbCKuu_nemyx, (Updated )

Комментарии (11) RSS

  • Какой противный код: глобалка, да еще и ручной new.

    Вызывает подозрение строка двенадцать
    Ответить
      • так краш же будет? если не в синтетике и foo не вызовется
        Ответить
        • Смотри внимательно:
          if (!SomeGlobalPointer)
            {
             // эта ветка вызовется, только если SomeGlobalPointer == 0
            }
          Ответить
            • Оказывается, не факт:

              If expression evaluates to a null pointer value, no destructors are called, and the deallocation function may or may not be called (it's unspecified), but the default deallocation functions are guaranteed to do nothing when passed a null pointer.

              https://en.cppreference.com/w/cpp/language/delete

              Т. е. зависит от типа. Встроенные деаллокаторы обещают с нулём ничего не делать.
              Ответить
              • а по умолчанию SomeGlobalPointer на nullptr указывает или на мусор? я так понимаю, зависит от release/debug?
                Ответить
                • У статической переменной значением будет нуль по стандарту наскока я помню. Это сделано вероятно потому, что операцинка выделяет тебе память предварительно обнулив, чтобы тебе не досталось памяти чужого процесса (и ты не узнал грязные секретики)

                  Алсо, тут vlaue инициализатор "{}" который явно закажет туда nullptr
                  Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8