Вы не показали, какие объекты вы создали, но что бы вы ни делали, чтобы создать эти объекты, наоборот, как вы их освобождаете, если хотите.
Обратите внимание, что если ваши объекты просто потребляют память в куче, вы можете просто позволить Windows вернуть всю память, используемую вашим процессом, и побочные эффекты этого (если их нет) могут включать в себя то, что ваше крошечное приложение закрывается быстрее ,
Тем не менее, большинство добросовестных разработчиков предпочитают полностью освобождать каждый объект, который они создают. Если вы создали такой объект:
x := TMyObject.Create;
.. тогда вы освободите его, позвонив бесплатно:
x.Free;
Если объект является компонентом, принадлежащим его родителю, вам не нужно его освобождать.
Если объект является интерфейсным объектом (подсчет ссылок), вы просто отпускаете свою ссылку следующим образом:
x := nil;
Если рассматриваемый тип является типом-значением (Double, Integer), вам не нужно его освобождать.
Если рассматриваемый тип управляется автоматически (запись, строка), вам также не нужно его освобождать.
Если ваш объект выделяет больше объектов, правильное место для их освобождения находится в деструкторе этого объекта.
Это правила. Просто следуйте за ними, и у вас не будет утечек. Ваше консольное приложение завершается способом, который вы не указали. Вы ожидали какого-то волшебного ответа на свой неуказанный вопрос? Если бы это был я, я бы гарантировал, что мое приложение было нормально завершено, и что при нормальном завершении оно освобождает свои ресурсы. Если он завершается ненормально, то все написанные вами блоки try..finally не будут выполнены. Я рекомендую вам один раз пройти через код завершения работы, чтобы убедиться, что он вообще выполняется.
Если бы вы опубликовали несколько примеров своего кода, то были бы возможны более конкретные ответы.