#include <iostream>

struct Base
{
  Base()          { std::cout << "Base" << std::endl; }
  virtual ~Base() { std::cout << "~Base" << std::endl; }
  int i;
};

struct Derived : public Base
{
  Derived()          { std::cout << "Derived" <<std::endl; }
  virtual ~Derived() { std::cout << "~Derived" << std::endl; }
  int it[10]; // sizeof(Base) != sizeof(Derived) 
};

int main()
{
  Base *bp = new Derived;
  Base *bq = new Derived[5];

  delete    bp;
  delete[]  bq;   // this causes runtime error 
  return 0;
}