Код из прошлой жизни
Работал над утилитой в популярной в прошлом среде разработки. Сама утилита состоит из откомпилированного файла и файлов формы, которые можно править, не закрывая программу. Собственно, в форму я и засунул большинство логики.
Во время очередной итерации разработки перекинул часть кода в другое место. Некоторое время спустя в другой кусок понадобилось добавить несколько строк. Вот этот второй кусок найти оказалось затруднительно. Ни в одной процедуре формы его не оказалось. В файле, который компилируется, этого куска никогда и не было. Смущало отсутствие в методах формы традиционного Create (я работаю с разными оболочками, не всегда помню, где что как называется). В то же время запуск функции в программе успешно выполнял то, что должен. В выпадающих списках предлагались значения, которые и выбирал исчезнувший кусок кода. Кофе и свежий воздух не проясняли картину.
Всё стало ясно, когда я посмотрел бэкап утилиты. Всё правильно, в текущем варианте кода не было. Всё дело в том, что создавались временные таблицы для списка значений, а так как сама программа не перезапускалась, объекты остались. К ним программа и обращалась.
Вывод первый: созданные динамические объекты нужно уничтожать. Вывод второй: чудес не бывает.