By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
449,149 Members | 987 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 449,149 IT Pros & Developers. It's quick & easy.

Is there a way to write a memory leak detector supporting new(nothrow)?

P: n/a
Is there a way to write a memory leak detector supporting new(nothrow)?

For example,

#include <My_Debug_New.h>

using namespace std;

int main()
{
int* p1 = new int;
int* p2 = new(nothrow) int; // note this!!!
}

Ideally, after running it in debug mode, owing to p1 and p2 are not
deleted, the output window of the IDE should report memory leaks with
source file names and actual line numbers.

Provided that the whole program doesn't use new(nothrow), I can
implement a memory leak detector as follows:

#if _DEBUG
void* operator new(size_t size, char* srcFileName, int nLineNum);
void* operator delete(void* p);
// ......
#define new new(__FILE__, __LINE__)
#endif

However, by using macro, new and new(nothrow) cannot be simultaneouly
supported. My question is: How to implement this feature that can
simultaneously support? Is this feasible?

Thanks in advance for any help.

Aug 18 '06 #1
Share this Question
Share on Google+
1 Reply


P: n/a
Lighter wrote:
Is there a way to write a memory leak detector supporting new(nothrow)?

For example,

#include <My_Debug_New.h>

using namespace std;

int main()
{
int* p1 = new int;
int* p2 = new(nothrow) int; // note this!!!
}

Ideally, after running it in debug mode, owing to p1 and p2 are not
deleted, the output window of the IDE should report memory leaks with
source file names and actual line numbers.

Provided that the whole program doesn't use new(nothrow), I can
implement a memory leak detector as follows:

#if _DEBUG
void* operator new(size_t size, char* srcFileName, int nLineNum);
void* operator delete(void* p);
// ......
#define new new(__FILE__, __LINE__)
#endif

However, by using macro, new and new(nothrow) cannot be simultaneouly
supported. My question is: How to implement this feature that can
simultaneously support? Is this feasible?

Thanks in advance for any help.
Overloading new and delete to detect memory leaks is a brittle solution.
Using macros to redefine a keyword is more brittle. At that point you
are relying on clients to correctly use one thing (your redefined new)
to detect incorrectly using another thing (ironically, the same thing
you are relying on them to use correctly).

A better solution is to use some memory debugger like Valgrind or
Purify. There is a list of memory debuggers on wikipedia:
http://en.wikipedia.org/wiki/Memory_debugger

--
Alan Johnson
Aug 18 '06 #2

This discussion thread is closed

Replies have been disabled for this discussion.