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

0

  1. 1
char* mData=new char[MAX_STRING_LENGTH+1];

Кто сможет перечислить все ошибки в этом говнокоде?

Запостил: Говногость Говногость, (Updated )

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

    • В плюсах разбираюсь плохо. Но если она большая и данные лучше разместить на куче?
      Ответить
  • ошибка может быть только если
    #define MAX_STRING_LENGTH (-1)

    либо один дибил не сказал другому, что MAX_STRING_LENGTH - это включая замыкающий \0
    Ответить
    • возможно, Говногость считает, что не использовать строки - это ошибка.
      Ответить
  • В зависимости от контекста, конечно, но:
    1)Возможный перерасход памяти, если MAX_STRING_LENGTH больше обычно используемой длинны.
    2)Частично требует ручной работы со строкой.
    3)Код не безопасен с точки зрения исключений.
    4)Массив кастится до указателя и поэтому теряется его длинна. То есть, не смотря на то, что длинна константная, обобщенными методами (например через sizeof или шаблон) получить длину массива нельзя.
    5)Нет автоматического контроля за выходом индекса массива за диапазон MAX_STRING_LENGTH.
    6)Лучше использовать std::string.
    7) +1 не нужен. Нумерация массива начинается с 0. В любом случае, не всегда можно понять по коду MAX_STRING_LENGTH включает \0 или нет. Забыл ли +1 автор или нет? То есть, не всегда возможно определить есть ли ошибка или нет.
    Ответить
    • исходя из твоей логики: весь язык С - это говнокод >_<
      Ответить
        • я понимаю, что кресты
          или "все что нормально для С, плохо для С++"?


          не говоря уже о том, что далеко не всегда "лучше использовать std::string"
          Ответить
          • > все что нормально для С, плохо для С++
            В случае тезиса о std::string так и есть

            ой и дырявая же каптча...
            Ответить
    • большинство проблем вытекает из C-style, хотя код заявлен как С++
      Ответить
    • 1. про MAX_STRING_LENGTH нам ничего не известно - почему мы должны думать, что ошибка?
      2. может требуется - хз для чего?
      3. по 1 строке не видно. можно расставить try/catch чтобы было безопасно.
      4. а куда денешься, если C-style, опять же его использование может для чего еще нужно?
      5. в коде вообще нет обращений по индексу.
      6. лучше конечно, но откуда нам знать, можно ли?
      7.вообще не ошибка, т.к. будет работать как для включенного \0, так и не включенного. хотя, 1 лишний байт в куче не гуд конечно.
      Ответить
  • > Кто сможет перечислить все ошибки в этом говнокоде?
    Вы имеете ввиду сайт?
    Ответить

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

Семь раз отмерь — один отрежь, guest!

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


    8