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

    +7.2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    float *val32;
    val32 = new(float);
    *val32 = 0.0f;
    memcpy((float*)(((char*)val32)+0), buf+(i*4)+0, 1);
    memcpy((float*)(((char*)val32)+1), buf+(i*4)-1, 1);
    memcpy((float*)(((char*)val32)+2), buf+(i*4)+2, 1);
    memcpy((float*)(((char*)val32)+3), buf+(i*4)+1, 1);
    
    int value = device->DownValue32(*val32, start + (i*2) - 2);
    
    free (val32);

    Заводить переменные с стеке это для лохов. Реальные пацаны все выделяют в стеке.

    Запостил: pathfinder, 18 Августа 2009

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

    • Сорри.... Опечаточка. :( "Реальные пацаны все выделяют в куче"
      Ответить
    • А еще memcpy, чтобы быстрее работало, чем просто переместить байт через =.
      Ответить
    • Напоминает стиль исполнения студенческих лабораторок - каждая новая лаба есть старая лаба + внедрение новых "фич". В этой лабораторке, видимо, надо было освоить кучу и стандартные функции управления буферами.
      Ответить
    • Не. Это защита, что-бы стек не портился. А куча - бог с ней... Авось промажет, когда учитель будет проверять лабу. :D
      Ответить
    • Вообще-то выделять память new и при этом освобождать через free непереносимо.
      Память, выделенную new, следует освобождать delete.
      Память, выделенную new[], следует освобождать delete[].
      Память, выделенную malloc(), следует освобождать free().
      Ответить
    • Не факт. Кто знает что там за этим device стоит. Может ему выравнивание до границы слова надо. Вот и вышли из положения.
      new от malloc отличается только вызовом конструктора, в целом распределитель тот-же, освобождать в _данном_ месте так можно. Понятно, что free и delete отличаются вызовом деструктора(ов) перед освобождением.
      Ответить

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