2014-01-26 2 views
1

Давным-давно мне сказали о каком-то утверждении, которое вы добавили в начале приложения, и когда это будет сделано, средство сообщит, имеет ли приложение незаслуженную память.Разработка Windows: как определить, происходит ли утечка моего приложения?

ТИА

Добавление

Здесь:

http://msdn.microsoft.com/en-us/library/e5ewb1h3%28v=vs.80%29.aspx

+1

http://stackoverflow.com/questions/413477/is-there-a-good-valgrind-substitute-for-windows#413842 –

+1

Слишком много способов сделать это, чтобы ответить на ваш вопрос напрямую, тем более что там нет подробностей относительно того, что вы на самом деле делаете *. Натуральное приложение WINAPI, которое не использует CRT, вообще не найдет CRT-отладки-кучи, бесполезно. Использование WinDbg и глобальных/локальных объектов Win32 будет бесполезным, если вы используете библиотеку подсетей (как и многие CRT). Вероятно, вам лучше искать этот сайт для ответов, которые наилучшим образом соответствуют вашему конкретному использованию. Я могу все-но гарантировать его покрытие * где-то *. – WhozCraig

+2

Скорее всего, это то, что вы имеете в виду http://msdn.microsoft.com/en-us/library/x98tx3cf.aspx –

ответ

1

отладки C во время выполнения библиотеки с Visual Studio может отслеживать все выделения и автоматически сообщать о любых, которые не освобождены при выходе приложения. Во-первых, включают <crtdbg.h>, а затем в самом начале программы, попросите его, чтобы отслеживать утечки распределения и отчетов, сделав этот призыв:

_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); 

В выходной отладки окна Visual Studio отладчик (или другую программу, которая контролирует вывод отладки), вы увидите отчет о утечках, когда приложение закончится.

В общем, вы, вероятно, только хотите сделать это в сборке отладки, так как есть нетривиальное влияние производительности.

Также обратите внимание, что если вы выделите однотонные и никогда не освободите их, они (как ни удивительно) будут сообщаться как утечки.

Full details находятся в MSDN.

Смежные вопросы