Go back to Richel Bilderbeek's homepage.

Go back to Richel Bilderbeek's C++ page.

 

 

 

 

 

(C++) std::bad_alloc

 

std::bad_alloc is an exception and a derived class from std::exception. std::bad_alloc is thrown by new when new fails.

 

std::bad_alloc is defined in the header file new.

 

 

 

 

 

Example

 

 

#include <cassert>
#include <limits>
#include <boost/numeric/conversion/bounds.hpp>

///Example1 creates an array larger than memory can contain
void Example1()
{
  //Assure that 2147483647 is the heighest value an int can contain using STL and Boost
  assert(2147483647 == std::numeric_limits<int>::max());
  assert(2147483647 == boost::numeric::bounds<int>::highest());

  //Create the array with the largest possible size, the size its value
  //being the heighest value an int can contain
  const double * const i = new double[2147483647];

  //Clean up
  delete[] i;
}

#include <iostream>

///Examle2 leaks memory
//(at my computer, the counter called i reached the value of 38)
void Example2()
{
  for (int i=0; i!=100; ++i)
  {
    std::clog << i << '\n';
    const double * const a = new double[10000000];
    //delete[] a; //BAD: a must be deleted[], otherwise memory will leak
  }
}

int main()
{
  //Choose your way to crash your computer:
  Example1();
  //Example2();
}

 

 

 

 

 

Screen output

 

terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
The program has unexpectedly finished.

 

 

 

 

 

External links

 

 

 

 

 

 

Go back to Richel Bilderbeek's C++ page.

Go back to Richel Bilderbeek's homepage.

 

Valid XHTML 1.0 Strict