1. Си / Говнокод #9577

    +137

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    if (p)
      free(p);
    
    /* ... */
    
    if (p)
      q = realloc(p, size);
    else
      q = malloc(size);

    немного классики.

    из сырцов pdftohtml.

    Запостил: Dummy00001, 01 Марта 2012

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

    • помимо ненужной проверки в первой строке (опять эта первая строка) не вижу ГК.
      Ответить
      • вторая проверка тоже не нужна: `realloc( NULL, size )` == `malloc( size )`.
        Ответить
        • точно:) ну, решил перестраховаться товарищ
          Ответить
          • перестраховаться от чего?
            Ответить
            • Это как лишние скобки, если приоритет операций не помнишь. В этом смысле.
              Ответить
              • не буду придуриватся что я этим сам не страдаю. :)

                но когда замечаю - убиваю. лишние проверки такого характера иногда создают илюзию корректности кода. типа если все данные на что-то проверил - то ничего произойти не может. а фишка то в том что кривой поинтер он ведь тоже почти никогда не нулл...
                Ответить
                • > кривой поинтер он ведь тоже почти никогда не нулл
                  Русская рулетка. Что-то освободили.
                  Ответить
        • free() не меняет значение указателя.
          Ответить
        • тайна не раскрыта если size == 0 то она работает как free(p) так что тут намного опасней нулевой size чем нулевой p как раз наоборот нулевой p часто специально используется чтобы не писать
          if (!p)
          malloc
          else
          realloc
          Ответить
      • насчет if (p) free(p)
        да че вы гоните cmp je быстрее чем call cmp je ret add esp может чувак из лучших побуждений вставил проверку
        Ответить
    • realloc здесь в принципе достаточно, если его решили использовать. Он и выделяет память и перевыделяет и освобождает. И NULL возвращает, если все же память решили освободить.
      Ответить
    • Это не то что классика, это антик.
      Ответить

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