Bad allocation exceptions in C++

CaptainNemo picture CaptainNemo · Jan 6, 2011 · Viewed 56k times · Source

In a school project of mine, I was requested to create a program without using STL

In the program, I use a lot of

Pointer* = new Something;
if (Pointer == NULL) throw AllocationError();

My questions are about allocation error:

  1. is there an automatic exception thrown by new when allocation fails?
  2. if so, how can I catch it if I'm not using STL (#include "exception.h")?
  3. is NULL testing enough?

Thank You.
I'm using eclipseCDT(C++) with MinGW on Windows 7.

Answer

bcsanches picture bcsanches · Jan 6, 2011

Yes, the new operator will automatically thrown an exception if it cannot allocate the memory.

Unless your compiler disables it somehow, the new operator will never return a NULL pointer.

It throws a bad_alloc exception.

Also there is a nothrow version of new that you can use:

int *p = new(nothrow) int(3);

This version returns a null pointer if the memory cannot be allocated. But also note that this does not guarantee a 100% nothrow, because the constructor of the object can still throw exceptions.

Bit more of information: http://msdn.microsoft.com/en-us/library/stxdwfae(VS.71).aspx