Previous Section  < Free Open Study >  Next Section

Example Code for Leak #4


#include <iostream. h> 

class Point {

 int x, y;

 char* color;

 Point(int=0, int=0, char*=''Red'');

 ~Point();

};

Point::Point(int new_x, int new_y, char* col)

{

 x = new_x; y = new_y;

 color = new char[strlen(col)+1];

 strcpy(color, col);

}

Point::~Point()

{

 delete color;

}

main()

{

// The following line of code dynamically

// allocates an array of 10 pointers to

// Point objects (not the objects themselves).



 Point **p = new Point*[10];

 int i;

// The loop below allocates one Point object

// for each of the Point pointers.

 for (i=0; i<10; i++) {

  p[i] = new Point(i, i, ''Green'');

 }

// The following statement does not clean up

// the individual points, just their pointers. It

// results in the leakage of memory

// (10*sizeof(Point) + 60 bytes of space).

// Note: The 60 bytes are incurred for the

// storage of the string ''Green'' in each of the

// 10 objects.

   delete[]p; // or delete[10] p;

   // The correct code is as follows:

   /*

      for (i=0; i < 10; i++) {

       delete p[i];

      }

      delete p;

   */

}

    Previous Section  < Free Open Study >  Next Section