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

    +138

    1. 1
    if ((NULL != (string_array = (0 == *length) ? malloc((*length + 1) * REG_SIZE) : realloc(string_array, (*length + 1) * REG_SIZE))))

    А кому-то это говно меинтейнить надо будет...

    Запостил: codemonkey, 08 Октября 2014

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

    • Код понятный.
      Ответить
      • Ага. Но почему-то все забывают, что realloc способен работать как malloc (да и как free):
        string_array = realloc(string_array, (*length + 1) * REG_SIZE);
        if (string_array) {
            // ...
        }
        Ответить
        • P.S. Утечка памяти при out of memory сохранена ;)
          Ответить
          • А разве сейчас что-то сишное расчитано на корректную работу при Out Of Memory?
            Ответить
            • >А разве вообще что-то расчитано на корректную работу при Out Of Memory?
              fixed
              Ответить
              • Redis вроде умеет удалять записи, которые он посчитает «лишними», при возникновении Out Of Memory.
                Ответить
                • LRU? При использовании в качестве кеша в оперативке - вполне логичный ход.
                  Ответить
        • Документацию никто не читает. Скопипастил пример и готово.
          "Хуяк, хуяк и в продакшн" как говорится.
          Ответить
        • > что realloc способен работать как malloc (да и как free)
          Кстати, эта фича realloc используется в сишном интерфейсе lua. Там "интерфейс" аллокатора спроектирован под влияним realloc
          http://www.lua.org/manual/5.1/manual.html#lua%5FAlloc
          Ответить

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