Имейте в виду, что когда вы выделяете блок памяти, используя new (или malloc в этом отношении), фактический выделенный блок памяти будет больше, чем вы запрашивали.
Блок памяти также будет содержать некоторую бухгалтерскую информацию, так что когда вы освобождаете блок, его можно легко вернуть обратно в пул свободных мест и, возможно, объединить со смежными свободными блоками.
Когда вы пытаетесь освободить память, которую вы не получили от новой, этой бухгалтерской информации не будет, но система будет работать так, как она есть, и результаты будут непредсказуемыми (обычно плохими).