Кресты / Говнокод #4612 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
for( int b = 0; b < cntblocket; ++b )
{
    delete msrLst[b]->record;
    delete msrLst[b]->record;
}

Сразу вспоминается: "- А зачем у вас тут два одинаковых jump'а стоять? - А вдруг один не сработает?"

Видимо, совсем не выспался программист ;)

Запостил: ftptrash ftptrash, (Updated )

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

  • два джампа ничего плохого не сделают, а вот два delete - вполне могут.
    Ответить
  • явные delete? я надеюсь, что приведенный код - часть десктруктора
    Ответить
    • важнее, что их 2 подряд, одинаковых. Хорошо хоть такие косяки отлавливаются довольно легко.
      Ответить
      • > отлавливаются довольно легко.
        с этого места поподробнее, плиз.
        Ответить
        • в классе msrLst[b]->record (назовем его test)
          способ 1:
          добавим static int ObjCount;
          int test::ObjCount = 0;
          в конструкторе ObjCount ++;
          в деструкторе if ((-- ObjCount) < 0) throw ....;
          при выполнении получим что такое вообще имеет место быть - теперь знаем что искать. искать придется вручную.
          способ 2:
          Делаем сингл-тон хеш-таблицу.
          в конструкторе test:
          hash[int(this)] = this;
          в деструкторе test:
          if (hash[int(this)] == NULL) throw ...; // тут получим конкретный вызов
          hash[int(this)] = NULL;
          Ответить
          • Хорошо, но для этого надо сначала класс локализовать.
            Ответить
          • кидать в деструкторах - плохо.
            надо бы хотя бы добавить
            if(--ObjCount < 0 && !uncaught_exception()) throw 666;

            потом оборачивать придется все классы и структуры в countable_. т.е.
            class ... : public countable_ { ... };
            Ответить
            • я имел в виду идею, понятно, что ее надо довести до ума.
              Ответить
  • Тест на трезвость 🙂 "Сколько операторов delete тут написано?"
    Тест на трезвость 🙂 "Сколько операторов delete тут написано?"
    Ответить
  • Да тут наверняка копипаста и забыл исправить в
    delete msrLst[b]->record;
    слово record на что-то ещё.
    Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8