views:

213

answers:

4

I'm working on a project using many external library on windows. I got problem with memory leak: i detected many memory leaks by overriding operator new/new[] and delete/delete[]. The problem is i know how many memory blocks are leaked, but don't know where to find them, in overrided functions, i could log size and position of allocated mem block, without stack trace.

So to deal with it, i guess i need to log stack trace too (but how?), or is there any way to find which code caused memory leaked?

Thanks a lot for any help.

+3  A: 

I use the following approach to supply new with info on which file and line that allocates each memory block:

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__)
Andreas Brinck
This does nothing for third party libraries, though.
Hasturkun
A: 

There are also COTS that can show memory leaks for you such as Rational Purify (http://www-01.ibm.com/software/awdtools/purify/win/). I m mentioning that as we used it in my last position.

I suppose there are also free ones. Please mention if any.

Sunscreen