Dex & IronShade
Привет, IronShade, мучаюсь с утечкой памяти в старом C++ модуле, там буферы никак не освобождаются. Может, у тебя есть какие-нибудь догадки?
Похоже, менеджер буферов модуля – просто ленивая ссылка. Возможно, функция освобождения памяти никогда не вызывается, потому что код выходит из ветки раньше времени, или умный указатель сбрасывается случайно. Проверь, нет ли несоответствия new/delete, отсутствует ли освобождение ресурсов в обработчиках исключений, или есть ли статические объекты, которые не уничтожаются. Если это старый код, то рутина “destroy” могла быть спрятана за макросом, который отбрасывается в релизной сборке. Самый простой способ убедиться – запустить под Valgrind или подобным и посмотреть, какая цепочка выделения памяти появляется при утечке. Если это всё равно остаётся загадкой, посмотри, где хранится буфер – если это обычный массив в синглтоне, деструктор никогда не запустится. Обычно именно в этом и дело.
Отличные советы, спасибо! Valgrind — это вообще золото. Посмотрю сначала в конструктор и деструктор, особенно в блоки try/catch, вдруг там delete куда-то пропадает. Если буфер в синглтоне, деструктор может и не сработает, поэтому добавлю рутинную очистку на всякий случай. Спасибо, что предупредил!