[Insight-developers] is operator new returning NULL ?

Mathieu Malaterre mathieu.malaterre at gmail.com
Tue Dec 11 08:40:03 EST 2007


Thanks Luis ! I did not know that.

As a side note, I doubt a lot of people out there know that, and I am
pretty sure a lot of ITK code is not checking for return value after a
call to operator new...

2 cents,
-Mathieu

On Dec 11, 2007 2:26 PM, Luis Ibanez <luis.ibanez at kitware.com> wrote:
>
>
> Not that we are intentionally picking on VS6,... but...
>
> VS6 will not throw exceptions when the "new" operator
> fails to allocate memory:
>
>
>            http://www.codemaestro.com/articles/14
>
>
> "Operator new Surprises in VC6
>
> The following item is a must for every Visual C++ 6.0 programmer which
> uses operator new. The default behavior of operator new in Microsoft
> Visual C++ 6.0 in case of an error is to return NULL, in total contrast
> to the standard which explicitly states that new raises a bad_alloc
> exception upon failure. This behavior can lead to many unpleasant
> surprises, especially when trying to write portable code.
>
> Here are some painful facts to feast your eyes with after you have
> written so much "error free" code with operator new in VC6:
>
> * Unlike VC6, Newer versions of Visual Studio conform to the exception
> throwing standard.
>
> * The STL is written according to the standard, therefore it assumes an
> exception will be thrown upon failure.
>
> * Platform independent code may end up on other machine types that
> conform to the standard.
>
>
> --
>
>
> So the trick of asking for NULL is (unfortunately) still necessary.
>
> Another workaround is to register a custom error handler for the
> new operator... as described in the link above.
>
>
>
>     Luis
>
>
>
> -------------------------
>
> Mathieu Malaterre wrote:
> > Hi,
> >
> >   The other day I was reading through some C code ported to C++ in
> > Code/IO namely the Siemens/GE4/GE5 stuff and found the following piece
> > of code:
> >
> >   GEImageHeader *hdr = new GEImageHeader;
> >   if(hdr == 0)
> >     {
> >     RAISE_EXCEPTION();
> >     }
> >
> >   AFAIK operator new never returns NULL, but throw an exception...well
> > on a standard conforming compiler. so the question is: is the code
> > simply copy/paste from C code or are there some (VS6 ?) buggy compiler
> > that do not throw exception ?
> >
> > thanks,
> >
>



-- 
Mathieu


More information about the Insight-developers mailing list