1. C++ / Говнокод #8479

    +989

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

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

    Запостил: Говногость, 11 Ноября 2011

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

    • MAX_STRING_LENGTH - константа.
      Ответить
      • В плюсах разбираюсь плохо. Но если она большая и данные лучше разместить на куче?
        Ответить
    • всё нормально в этом коде, урсус.
      Ответить
      • всё нормально, в этом коде усрус.
        Ответить
        • наговор! урсус тут не при чём!!!!
          Ответить
          • Как не причем? Ты пришёл, так что причем, даже когда тебя не звали.
            Ответить
          • СМОТРИТЕ ВСЕ ЭТО ЖЕ УРСУС!!!!!
            Ответить
            • В каком треде раздача автографов?
              Ответить
            • так, вот не надо этого урсусопоклонства.
              кстати, можете стать обожателями моей жжжшечки
              http://ursusalbus.livejournal.com
              а на лурке про говнокод статью на снос поставили - печаль (друзья сегодня хвастались что нашли меня).
              Ответить
    • ошибка может быть только если
      #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 лишний байт в куче не гуд конечно.
        Ответить
      • используйте жаву.
        Ответить
      • кстате говногость прав
        Ответить
    • >Кто сможет перечислить все ошибки в этом говнокоде?
      я почему-то сразу вспомнил про http://govnokod.ru/3130
      Ответить
    • > Кто сможет перечислить все ошибки в этом говнокоде?
      Вы имеете ввиду сайт?
      Ответить
    • Мужики, не обижайтесь...
      Ответить

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