title: mismatch new[] and delete, why is there no memory leak?
body: <p>When combining <code>new[]</code> with <code>delete</code> instead of <code>delete[]</code>, what really happens?  I tried the following code and found there is no memory leak, so why does <code>delete</code> on a <code>new[]</code> returned pointer not cause a leak?</p>
  
  <p>How does the compiler know the number of bytes to be freed?</p>
  
  <pre><code>int main() {
    constexpr int size = 102400;
    while (1) {
      char* buffer = new char[size]{};
      delete buffer;
    }
  
    return 0;
  }
  </code></pre>