Как проверить, что память была освобождена в Visual Studio C ++? - PullRequest
2 голосов
/ 23 февраля 2009

Я хочу убедиться, что вся моя память была освобождена нормально в Visual Studio 2008 в C ++. Я слышал, что могу добавить несколько включений и, возможно, написать строку кода, и это должно быть сделано.

Кто-нибудь знает, как я могу это сделать?

Заранее спасибо,

Грег

Ответы [ 5 ]

5 голосов
/ 23 февраля 2009

Нечто подобное может быть тем, что вы ищете.

#define _CRTDBG_MAP_ALLOC
#include <stdio.h> 
#include <crtdbg.h>

int main()
{
    malloc(100);
    _CrtDumpMemoryLeaks();
    return 1;
}
1 голос
/ 24 февраля 2009

Один из самых старых методов - переопределить операторы new и delete (при условии, что все выделения кучи выполняются через new). Выходные данные, размещенные внутри ваших перегруженных операторов new и delete, позволяют вам удостовериться, что вы очистились перед выходом. Но это может быть немного сложно; у вас будет соблазн перегрузить новое и удалить в глобальной области видимости. Но это может привести к другим необъяснимым ошибкам (конечно, вы будете использовать только перегруженные операторы в режиме отладки, хорошо). Оставьте это в своей области видимости.

Еще один разумный способ - использовать auto_ptr. Указатель, который вы хотите убедиться, что вы удалили, хранится в объекте шаблона auto_ptr в стеке. Поэтому, когда этот объект выходит из области видимости, он берет указатель, сохраненный вместе с ним.

Если вы все еще беспокоитесь об утечках, попробуйте учиться с помощью windbg. Это удивительный инструмент, который поможет вам выявить утечки памяти. Я нашел действительно эффективным обнаружение утечек, вызванных ручками.

0 голосов
/ 24 февраля 2009

В CodeProject есть хороший (бесплатный) служебный класс, который может помочь с Обнаружением утечки памяти . Я нашел это очень полезным при работе с устаревшим кодом, который был полон утечек памяти.

Чтобы избежать утечек в новом коде с использованием auto_ptr и RAAI в общем, это путь.

0 голосов
/ 24 февраля 2009

Я искал аналогичный инструмент для VC ++ 2003 и наткнулся на MemoryChecker от Software Verify ( www.softwareverify.com ). Не бесплатно, но по очень разумной цене (меньше, чем Purify and Bounds Checker). Я все еще оцениваю это, но части, которые я использовал, выглядят очень впечатляющими. Бесплатная 30-дневная пробная версия.

Вы можете отслеживать ошибки памяти (удалять вместо удаления [] и т. Д.), Утечка памяти, горячие точки памяти и т. Д., Не используя ничего подобного раньше, я считаю, что это довольно круто

0 голосов
/ 23 февраля 2009

включает "crtdbg.h"

и используйте

_CrtDumpMemoryLeaks ()

Вы можете посмотреть в crtdbg другие методы, которые также могут быть полезны.

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