0

Я включил отладку кучи, чтобы попробовать и отладить некоторые ошибки утечки памяти. Я делаю это, в том числе следующие:Использование отладки кучи MS VC++ 2005

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

вместе с вызовом _CrtDumpMemoryLeaks() в зависимости от интересов.

Затем я также изменить конфигурацию проекта свойств, чтобы установить тип отладки для 'Native Only' и добавить определение '_DEBUG' препроцессора и C/C++ генерации кода во время выполнения библиотеки /MDd. Я обнаружил, что независимо от того, где я положил вызов функции _CrtDumpMemoryLeaks(), он выгружает вывод утечки памяти следующим образом.

Detected memory leaks! 
Dumping objects -> 
{2606} normal block at 0x000000003D3A5370, 32 bytes long. 
Data: <VAR1> 54 48 45 52 4D 41 4C 5F 43 4F 4E 44 55 43 54 49 
{2605} normal block at 0x000000003D3A52E0, 32 bytes long. 
Data: <VAR2> 52 4F 43 4B 5F 48 45 41 54 5F 43 41 50 41 43 49 
{2604} normal block at 0x000000003D3A5250, 32 bytes long. 
Data: <VAR3> 45 51 55 49 4C 49 42 52 41 54 49 4F 4E 5F 52 45 
{2603} normal block at 0x000000003D3A51C0, 32 bytes long. 
Data: <VAR4> 4D 41 58 5F 57 41 54 45 52 5F 43 41 50 49 4C 4C 
{2602} normal block at 0x000000003D3A5130, 32 bytes long. 
Data: <VAR5> 4D 41 58 5F 47 41 53 5F 43 41 50 49 4C 4C 41 52 
{2601} normal block at 0x000000003D3A50A0, 32 bytes long. 
Data: <VAR6> 57 41 54 45 52 5F 43 4F 4D 50 52 45 53 53 49 42 
{2600} normal block at 0x000000003D3A5000, 48 bytes long. 

Что это может означать? Означает ли это, что если в точке вызова был выход дампа, то перед этим возникает ошибка/утечка? Можем ли мы это сделать точно? Если нет, это не кажется действительно полезной утилитой. Любые рекомендации/помощь в том, как правильно его использовать или в отношении интерпретации. Благодаря!

ответ

1

Предположим, что у вас есть следующие пары:

int *x = new int[5]; 
int *y = new int[7]; 

delete[] y; 
_CrtDumpMemoryLeaks(); 
delete[] x; 

Независимо удалить x позже дамп будет включать в себя x как не освобождены. Фактически стандартная методика MS требовала высоких навыков понимания управления памятью. Для упрощения вашей жизни я рекомендую Visual Leak Detector - легко встраивается в ваш проект и легко обнаруживает ошибки (и это бесплатно).

+0

Спасибо .. Я дам вам попробовать. Цените свой ответ! –

+0

Кажется, что это действительно только для 2008/2010. Знаете ли вы какие-либо варианты на 2005 год? Ничего, похоже, что он поддерживает 2005 год .. даст ему шанс. –

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