Base class destructor is not virtual and child class destructor is virtual, program crash
<p>Why does following program crash, I have <code>base</code> class whose destructor is not virtual but <code>child</code> class destructor is <code>virtual</code></p>

<pre><code>#include &lt;iostream&gt;
class Base {
public:
  Base() {
    std::cout &lt;&lt; "Base::Base CTOR " &lt;&lt; std::endl;
  }
  ~Base() {
    std::cout &lt;&lt; "Base::Base DTOR " &lt;&lt; std::endl;
  }
private:
protected:
};

class Child : public Base {
public:
  Child(){
    std::cout &lt;&lt; "Child::Child CTOR " &lt;&lt; std::endl;
  }
  virtual ~Child(){
    std::cout &lt;&lt; "Child::Child DTOR " &lt;&lt; std::endl;
  }
private:
protected:
};
int main ( int argc, char **argv) {
  Base *ptr = new Child;
  delete ptr;
}
</code></pre>
