C ++ метод обнаружения утечек памяти - PullRequest
1 голос
/ 19 апреля 2010

Я работаю над проектом, использующим много внешних библиотек в Windows. У меня проблема с утечкой памяти: я обнаружил много утечек памяти, переопределив оператор new / new [] и delete / delete []. Проблема в том, что я знаю, сколько блоков памяти просочилось, но не знаю, где их найти, в переопределенных функциях я могу записать размер и позицию выделенного блока mem без трассировки стека.

Так что, чтобы справиться с этим, я думаю, мне тоже нужно записывать трассировку стека (но как?), Или есть какой-нибудь способ узнать, какой код вызвал утечку памяти?

Большое спасибо за любую помощь.

Ответы [ 2 ]

3 голосов
/ 19 апреля 2010

Я использую следующий подход для предоставления new информации о том, какой файл и строка выделяет каждый блок памяти:

void operator delete(void *p, const char* filename, int line);
void operator delete(void *p, const char* filename, int line, const std::nothrow_t&);
void operator delete[](void *p, const char* filename, int line);
void operator delete[](void *p, const char* filename, int line, const std::nothrow_t&);

void *operator new(std::size_t n, const char* filename, int line);
void *operator new(std::size_t n, const std::nothrow_t&, const char* filename, int line);
void *operator new[](std::size_t n, const char* filename, int line);
void *operator new[](std::size_t n, const std::nothrow_t&, const char* filename, int line);

#define new foo_new
#define foo_new new(__FILE__, __LINE__)
0 голосов
/ 20 апреля 2010

Есть также COTS, которые могут показывать утечки памяти, такие как Rational Purify (http://www -01.ibm.com / software / awdtools / Очистить / win / ). Я упоминаю это, поскольку мы использовали это в моей последней позиции.

Полагаю, есть и бесплатные. Пожалуйста, укажите, если таковые имеются.

...