Code:
#include <stdio.h>

    class Person
	{ 
	public: ~Person(){}
	};
    class Englishman :public Person
    { 
	public: virtual ~Englishman()
		{ 
				printf( "Goodbye\n" ); 
		}
	};
    class Japanese : public Person
    { 
	public: virtual ~Japanese()
			{
				printf( "Sayonara\n" ); 
			} 
	};
   class German :public Person
   { 
   public: virtual ~German()
		   {
			   printf( "Auf Wiedersehen\n" ); 
		   } 
   };

   int main()
       {
       Person *p = new Japanese;
       delete p;
       p = new German;
       delete p;
       return 0;
       }
Since base class destructor is not declared virtual...that is why destructors of derived are not getting called...but why does the code crash....when i don't add virtual keyword to derive class destructors then my code does not crash