Debug memory allocator is broken...
michael berganovsky -- michael_berganovsky@ibi.com
Wednesday, September 25, 1996
Environment : VC++ 4.2a on WinNT 4.0.
We noticed memory leak which is reported by MSVC run-time when
exception happens in constructor when we are using MFC. Investigation
shows that you can get memory leak every time you are overloading
global new with the placement version and are using this placement in
your code. The reason is that Microsoft compiler supports only half of
ANSI draft - you can overload global new the way you want but you can
not create matching delete to take care of allocated memory.
--- This is from the working draft:
18 If the constructor throws an exception and the new-expression
contains a new-placement, a name lookup is performed on the name of
operator delete in the scope of this new-expression. If the lookup
succeeds and exactly one of the declarations found matches the
declaration of that placement operator new, then the matching
placement operator delete shall be called.
19 A declaration of placement operator delete matches the declaration
of a placement operator new when it has the same number of parameters
and all parameter types except the first are identical disregarding
top-level cv-qualifiers.
--- end of the quote
To the best of our knowledge there is no way to declare matching
delete in 4.2a version of the compiler, which IMHO leads to the
possible memory leaks each time you are using placement version of the
new operator. And you have this situation guaranteed if you are using
MFC in DEBUG mode and allow DEBUG_NEW to be performed in your code!
Best wishes...
Mike Blaszczak -- mikeblas@nwlink.com
Friday, September 27, 1996
At 10:12 9/25/96 edt, you wrote:
> Environment : VC++ 4.2a on WinNT 4.0.
> We noticed memory leak which is reported by MSVC run-time when
> exception happens in constructor when we are using MFC.
Yep.
This issue has been discussed on the list at great length at least
twice before. Please see http://www.nwlink.com/~mikeblas/PlacementNewBug.txt
for a write up of exactly what's going on.
> To the best of our knowledge there is no way to declare matching
> delete in 4.2a version of the compiler,
There is no 4.2a version of the compiler.
.B ekiM
http://www.nwlink.com/~mikeblas/
Don't look at my hands: look at my _shoulders_!
These words are my own. I do not speak on behalf of Microsoft.
michael berganovsky -- michael_berganovsky@ibi.com
Monday, September 30, 1996
I was not subscribed to this list long enough to notice the discussion
- sorry for any duplication. I simply wanted to warn people about the
problem we encountered. I don't need to read the text Mike is pointing
me at because I know exactly what is going on. However, I think that
in his description of the problem Mike is missing a couple of key
points - this issue ( a bug or problem ) is NOT MFC related. It just
happens to show itself clearly in debug version of MFC.
Workarounds suggested are no good - I can create this leak in release
mode without using MFC at all. And I am not using CFile!
Second - this IS not a problem with compiler omitting cleanup code.
For what I can see this is a problem with the compiler not allowing to
overload delete the way it suppose by the standard. And as such THIS
IS A VERY SERIOUS PROBLEM FOR ANY COMPILER WHICH CLAIMS TO BE ANSI
COMPLIANT.
-- Best Wishes
______________________________ Reply Separator _________________________________
Subject: Re: Debug memory allocator is broken...
Author: mfc-l@netcom.com at tcpgate
Date: 9/29/96 8:54 PM
At 10:12 9/25/96 edt, you wrote:
> Environment : VC++ 4.2a on WinNT 4.0.
> We noticed memory leak which is reported by MSVC run-time when
> exception happens in constructor when we are using MFC.
Yep.
This issue has been discussed on the list at great length at least
twice before. Please see http://www.nwlink.com/~mikeblas/PlacementNewBug.txt
for a write up of exactly what's going on.
> To the best of our knowledge there is no way to declare matching
> delete in 4.2a version of the compiler,
There is no 4.2a version of the compiler.
.B ekiM
http://www.nwlink.com/~mikeblas/
Don't look at my hands: look at my _shoulders_!
These words are my own. I do not speak on behalf of Microsoft.
| Вернуться в корень Архива
|