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

    +37

    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
    28. 28
    29. 29
    30. 30
    long* Service::qByteToLongArray(QByteArray qba, long r)
    {
        long* larr = new long[r];
    
        char *carr;
        carr = (char*)larr;
    
        int len = r * sizeof(long);//length in bytes
    
        for(int i=0; i < len; i++)
            carr[i] = qba.at(i);
    
        return larr;
    }
    
    QByteArray Service::longToQByteArray(long **larr2, long r, long c)
    {
        QByteArray qba;// = new QByteArray();
    
        char **carr2;
        carr2 = (char**)larr2;
    
        int rlen = c * sizeof(long);//length of row in bytes
    
        for(int i=0; i < r; i++){
            qba.append(carr2[i], rlen);//add next row of matrix to the QByteArray
        }
    
        return qba;
    }

    Нашли это, только когда собрали под x64.

    Запостил: Abbath, 25 Февраля 2014

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

    • показать все, что скрытоВот кому на хуй сдался ваш код? Тем более на "C++" - мне там ни хуя непонятно...
      И минус.
      Ответить
    • что за Qбайтоёпство? мешанина из си,кути
      Ответить
      • причем такое ёбство, что прям перформанс-перформанс
        for(int i=0; i < len; i++)
            carr[i] = qba.at(i);
        Ответить
      • Потом массив байтов грузился в базу на сервере. Если записать это на x64, а потом открыть на x86 или наоборот то его распидорасит.
        Ответить
        • И это при том, что в кути есть датастрим, который пашет одинаково на любой платформе.
          Ответить
          • Да мы то знаем. Предыдущие разработчики - нет. Только перфоманс, только хардкор. Ради перфоманса использовались еще адовые макросы, я тут скидывал.
            Ответить
    • третего слова в третьей строке уже достаточно, чтобы назвать код говном
      Ответить
      • Для этого достаточно paamayim nekudotayim в первой строке.
        Ответить
      • +2 -3
        конардо не считаем
        то есть таки ещё есть два школохацкера, считающих, что "им не нужны памперсы" (с)
        Ответить
      • А long * в качестве возвращаемого значения - тем более.

        Причем в Qt сериализация и загрузка вектора выглядят так:
        QDataStream ds(&f);
        
        // сохранение
        QVector<long> data;
        ds << data;
        
        // загрузка
        QVector<long> data;
        ds >> data;
        И не надо там никаких циклов, преобразований и new :)
        Ответить
        • > А long * в качестве возвращаемого значения - тем более.

          И это тоже. Было бы очень умно завести внутри умный указаталь а вернуть сырой.
          И ведь с вероятностью 90% он будет показывать на нужные данные, если ты не выделишь память в другой функции.
          Ответить
      • А Саттер писал, что new не зафейлит и не бросит исключения. Но я ему все равно не верю.
        Я сначала подумал, что ты про значащую третью, фактически пятую
        allen * carr = easyway::to.stop<coding>(c++);
        Ответить
        • > new не зафейлит и не бросит исключения
          Еще как бросает... Там гарантируется только то, что память не потечет при выбросе исключения конструктором одного из элементов массива. И что при этом вызовутся деструкторы у всех предыдущих элементов.

          Да и само по себе оно может кинуть, если памяти мало.
          Ответить

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