Search code examples
c++exceptionmingwnew-operatorallocation

Bad allocation exceptions in C++


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.


Solution

  • 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