Re: Is there a way to write a memory leak detector supporting new(nothrow)?
Greg proposed an interesting method, but I am afraid it is not reliable
in a multi-threaded environment.
My feeling it is that there might not be good ways to tackle the
problem itself. There are workarounds. If you use GCC, it is possible
to display the file/line information without even including a special
header file. See
http://wyw.dcweb.cn/leakage.htm
(Seek the section `Special improvement with gcc/binutils' if you do not
want to read about the basics of overriding operator new. If you choose
to do so, do take care that you have handled exception and
multi-threading correctly, which are also discussed in this article.)
If not, you might consider not using new directly. Use NEW and
NEW_NOTHROW instead to ease redefinition for debugging. Theoretically
it is ugly; practically it works in real projects.
Best regards,
Yongwei
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.
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]