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

    +50

    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
    char parser_msg(char *data, char size)
    {
        //<...>
        QByteArray bt;
        //<...>    
        x=(char *) malloc(size);
        bt.clear();
    
        for (i=0; i<size; i++) {
            x[i]=*data;
            bt.append(*data);
            *data++;
        }
    
        printf("Data parser! >> '%s'\n", bt.toHex().constData());
    
        if (x[0]==0x06) {
           //<...>
        }
    
        if (x[0]==...) {
           //<...>   
        }
    
       //<...>
    }

    Разбор команд из COM-порта. Используется Qt. QByteArray, кстати, заведен здесь только ради дебаг-принта.
    При вызове функции в кач. data передается указатель, возвращаемый data() другого байтаррэя, живущего на стеке.

    Запостил: ealx, 26 Ноября 2014

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

    • Это такое перекладывание памяти по байтику из стека выше по стеку в кучу?
      Ответить
      • Я бы это назвал эксгумацией, т.к. стек выше к этому моменту -- уже все.
        В общем, там что-то с потоками еще наворочено.
        Ответить
        • Хотя нет, вру. Тут все живы. Но с потоками в проекте все равно дрянь.
          Ответить
          • Вот как-то да:)
            void foo() {
            int spam = 1;
            doAll(&spam); // Хочеца думать что внутри вызова doAll адрес спама валиден)
            }


            но код и правда странный)
            Ответить
            • Валиден конечно.
              Ответить
            • > Хочеца думать что внутри вызова doAll адрес спама валиден)

              Борманд уже сказал, конечно, но вообще странно ожидать порчи адреса локальной переменной до выхода из функции.
              Управляемые языка избаловали людей.
              Ответить
              • Просто товарищ так уверено заявил что стек к моменту вызова уже всё, что я стал думать -- вдруг я чего-то сильно не знаю о сишечке
                Ответить

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