C++/Development/new delete

Материал из C\C++ эксперт
Перейти к: навигация, поиск

bad_alloc standard exception

   
#include <iostream>
#include <exception>
using namespace std;
int main () {
  try
  {
    int* myarray= new int[1000];
  }
  catch (exception& e)
  {
    cout << "Standard exception: " << e.what() << endl;
  }
  return 0;
}


delete memory allocate for objects

  
#include <iostream>
#include <stdlib.h>
using namespace std;
class loc 
{
  int longitude, latitude;
  public:
    loc(void) {}              
    loc (int lg, int lt)
    {
      longitude = lg;
      latitude = lt;
    }
    void show(void)
    {
      cout << longitude << " ";
      cout << latitude << endl;
    }
    void *operator new(size_t size);
    void operator delete(void *p);
    void *operator new[](size_t size);
    void operator delete[](void *p);
};
void *loc::operator new(size_t size)
 {
  cout << "In the custom new function." << endl;
  return malloc(size);
 }
void loc::operator delete(void *p)
 {
  cout << "In the custom delete function." << endl;
  free(p);
 }
void *loc::operator new[](size_t size)
{
  cout << "In the custom new ARRAY allocator function." << endl;
  return malloc(size);
}
void loc::operator delete[](void *p)
{
  cout << "Freeing the ARRAY in the custom delete function." << endl;
  free(p);
}
int main(void)
{
  loc *p1, *p2;
  int i;
  p1 = new loc(10,20);
  if (!p1)
  {
      cout << "Allocation error\n";
      exit(1);
    }
  p2 = new loc[10];
  if (!p2)
    {
     cout << "Allocation error\n";
      exit(1);
   }
  p1->show();
  for(i=0; i<10; i++)
     p2[i].show();
  delete p1;
  delete [] p2;
}


Demonstrating new throwing bad_alloc when memory is not allocated

   
#include <iostream>
using std::cout;
using std::endl;
#include <new>
using std::bad_alloc;
int main()
{
   double *ptr[ 50 ];
   
   try {   
      for ( int i = 0; i < 50; i++ ) {
         ptr[ i ] = new double[ 5000000 ];
         cout << "Allocated 5000000 doubles in ptr[ " << i << " ]\n";
      }
   }
   catch ( bad_alloc exception ) {
      cout << "Exception occurred: " 
           << exception.what() << endl;
   }
   
   return 0;
}


Use new operator to allocate memory for object

  
#include <iostream>
#include <stdlib.h>
using namespace std;
class loc 
{
   int longitude, latitude;
  public:
    loc(void) {}                
    loc (int lg, int lt)
      {
        longitude = lg;
        latitude = lt;
      }
    void show(void)
      {
      cout << longitude << " ";
      cout << latitude << endl;
      }
    void *operator new(size_t size);
    void operator delete(void *p);
};
void *loc::operator new(size_t size)
{
   cout << "In the custom new function." << endl;
   return malloc(size);
}
void loc::operator delete(void *p)
{
   cout << "In the custom delete function." << endl;
   free(p);
}
int main(void)
{
  loc *p1, *p2;
  p1 = new loc(10,20);
  if (!p1)
  {
     cout << "Allocation error\n";
     exit(1);
  }
  p2 = new loc(-10,-20);
  if (!p2)
  {
      cout << "Allocation error\n";
      exit(1);
  }
  p1->show();
  p2->show();
  delete p1;
  delete p2;
  exit (0);
}