Утечки памяти бывает трудно отследить. В вашем случае я подозреваю, что вы используете принтер этикеток с собственной библиотекой или драйвером, и утечки могут быть где угодно.
Во-первых, вы должны попытаться понять, какие модели управления памятью существуют в приложении. Как правило, в коде C++ Builder вы будете нести ответственность за выделение и освобождение памяти. Таким образом, каждый объект, который вы создаете с помощью new
, должен иметь соответствующий delete
— убедитесь, что вы понимаете, какая часть кода отвечает за освобождение объекта. (В версии 10.3.1 C++ Builder поддерживает C++ auto_ptr
, но вы можете не использовать его, и вы не можете гарантировать, что любой библиотечный код, на который вы ссылаетесь, будет соблюдать семантику auto_ptr
).
Если вы передаете информацию в код, использующий другую модель управления памятью (поэтому хорошим примером является использование COM-объекта), убедитесь, что вы понимаете последствия для управления памятью. Если вы передаете ему указатель, он ожидает его освобождения или ожидает, что вы его освободите, и если это вы, как вы узнаете, когда он закончил с ним.
Попробуйте запустить меньший тираж и посмотрите, можете ли вы использовать CodeGuard и подобрать все, что он предлагает.
Если ваша система находится в производстве, вы захотите, чтобы она работала. Один из вариантов — запустить его как запланированную задачу Windows. Он обработает заданное количество файлов и завершит работу. ОС освободит ресурсы, которые она использовала (но не те, которые утекли на системном уровне, возможно, из-за ошибочного драйвера). Это может позволить вам поддерживать его в рабочем состоянии весь день, пока вы продолжаете находить утечки.
Удачи!
person
Rob Lambden
schedule
08.08.2019