Устранение утечек памяти, выделенных с помощью нового оператора - PullRequest
0 голосов
/ 03 марта 2011

Есть ли способ отслеживать невыпущенные блоки памяти, выделенные с помощью оператора new ? Информация о невыпущенной памяти должна быть указана при выходе из приложения и содержать имя файла и fileline . Таким образом, должна быть возможность быстро идентифицировать новые операторы, вызывающие утечки памяти.

Если я прав, MFC DEBUG_NEW определит выполнение этой работы. Но как насчет не MFC C ++ приложений?

Используемая среда: 64-разрядная версия Visual Studio 2010 и Windows 7.

Ответы [ 2 ]

2 голосов
/ 03 марта 2011

Visual Studio CRT имеет некоторые функции, которые могут помочь вам найти утечки памяти в отладочных сборках, прочитайте http://msdn.microsoft.com/en-us/library/e5ewb1h3%28v=vs.80%29.aspx для получения дополнительной информации;есть много чего взять.

Также обычно считается наилучшей практикой пытаться всегда использовать класс shared_ptr для автоматического управления вашей памятью.Если вы не используете shared_ptr, подумайте о запуске.

1 голос
/ 03 марта 2011

Существует множество инструментов, которые могут помочь вам отследить утечки памяти.Все они имеют свои преимущества и недостатки.

Самым большим недостатком большинства инструментов является то, что они не показывают утечки автоматически.Вы явно должны записать состояние вашей памяти в файл во время жизни вашего приложения, затем несколько раз сбросить состояние снова, а затем сравнить два состояния.Это вряд ли удобно для разработчиков.

Visual Leak Detector - один из инструментов, который намного лучше (на мой взгляд).Он автоматически регистрирует все утечки в конце вашего приложения, включая стек вызовов.Обратите внимание, что Microsoft C Run Time также может регистрировать утечки, но делает это без стека вызовов.

Мой личный фаворит - просто управлять своим собственным памятью.Внедрите глобальное новое и удалите себя (обратите внимание: есть несколько вариантов, которые вам нужно реализовать), и внесите в журнал всю неосвобожденную память в конце приложения (здесь может помочь использование глобальной переменной, которая была уничтожена последней).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...