- 1
- 2
- 3
- 4
- 5
for( int b = 0; b < cntblocket; ++b )
{
delete msrLst[b]->record;
delete msrLst[b]->record;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+160
for( int b = 0; b < cntblocket; ++b )
{
delete msrLst[b]->record;
delete msrLst[b]->record;
}
Сразу вспоминается: "- А зачем у вас тут два одинаковых jump'а стоять? - А вдруг один не сработает?"
Видимо, совсем не выспался программист ;)
с этого места поподробнее, плиз.
способ 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 msrLst[b]->record;
слово record на что-то ещё.