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

    +163

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    typedef char char_array_2 [2] ;
    typedef char char_array_3 [3] ;
    typedef char char_array_22[32];
    
    /* ... */
    
    if( 0 == (purpose          = new char_array_3[ dArraySize ]  ) )
    {
       ALLOC_ERROR();
    }
    
    if( 0 == (mode             = new char_array_3[ dArraySize ]  ) )
    {
       ALLOC_ERROR();
    }
    
    if( 0 == (state            = new char_array_2[ dArraySize ]  ) )
    {
       ALLOC_ERROR();
    }
    
    if( 0 == (referencedate    = new char_array_22[ dArraySize ] ) )
    {
       ALLOC_ERROR();
    }
    
    /* и еще десяток в таком же стиле */

    С++ в (болгарские) массы. и пусть только попробуют сказать что мы ошибок выделения памяти не обрабатываем.

    ЗЫ самый прикол что код который этой памятью пользуется 100% совместим с std::vector<std::string>. хотя я бы лично все строки в структуру загнал (и структуры в вектор) бо 10+ массивов это говно.

    Запостил: Dummy00001, 12 Августа 2010

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

    • А как описан ALLOC_ERROR? Просто любопытно, нисколько не хочу приуменьшить говнистость даного ГК.
      Ответить
      • мля... и зачем ты меня спросил???

        теперь и это говно продется фиксить: через 4-5 уровней макросов, можно увидеть что это "фатальная ошибка" и она обрабатывается .. печатанием сообщения на stdout... идиоты даже эксепшена не бросают.
        Ответить
        • Везучий ты. Серьезный проект?
          Ответить
          • ... ответ на этот вопрос подподает под NDA которое я подписывал когда нанимали ;)
            Ответить
            • ) Фразы "нет", "скорее да, чем нет" и "да" тоже подподают?)
              Ответить
        • Потому-что, я бы еще понял такой код:
          if( 0 == (purpose = new char_array_3[ dArraySize ] ) )
          {
          throw MEM_ALLOC_ERR;
          }
          Вот и стало интересно, что же макрос делает, а то у меня в текущем проекте макросы делают все что хочешь, только не то, что надо. :)
          З.Ы.Сразу подозревал, что обработка некорректная)
          Ответить
    • А что значит
      typedef char char_array_2 [2] ;?
      В смысле, что значит "[2]"?
      Ответить
      • это значит что тип "char_array_2" есть "char[2]", массив из двух буков.
        Ответить
        • Ага. То есть char_array_3[ dArraySize ] это char[3][dArraySize]? Нах это может быть надо?
          Ну об этом хоть догадался, но char_array_22[32] уже не осилил.
          Ответить
          • > char[3][dArraySize]?

            нет, это "char[dArraySize][3]", алоцируется dArraySize элементов типа char[3].

            там char_array_2 прикольней используется: strcpy( state[mCurrRow], "A" ) или strcpy( state[mCurrRow], "D" )... т.е. там 2 элемента бо они копипастили тучи кода. оно там в общую картину вписывает, поэтому с первого взгляда какое это ГК и не догадываешься.
            Ответить
    • Особенно если вспомнить что operator new по стандарту по-умолчанию бросает std::bad_alloc, а не 0 возвращает, код доставляет.
      Ответить
      • как первый кто на это указал (что и является *гвоздем* говнокода) заслуживаешь награды. возьми с полки пирожок ;)
        Ответить

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