Подтвердить что ты не робот

Новый, удалить, malloc & free

Этот вопрос был задан мне в интервью:

В С++,

  • что, если мы выделяем память с помощью malloc и используем delete для освобождения выделенной памяти?
  • что, если мы выделим память с помощью new и освободим ее, используя free?

Каковы проблемы, с которыми мы столкнулись бы, если в коде используются эти вещи?

Мой ответ был не разницы. Правильно ли я это сказал?

4b9b3361

Ответ 1

Если вы это сделаете, вы столкнетесь с поведением undefined. Никогда не пробуйте это. Хотя new может быть реализовано с помощью malloc(), а delete может быть реализовано через free(), нет гарантии, что они действительно реализованы таким образом, а также пользователь может перегрузить new и delete по своему усмотрению. Вы рискуете столкнуться с кучей.

Кроме этого не забывайте, что при вызове malloc() вы получаете необработанную память - никакой конструктор не вызывается - и когда вы вызываете free(), никакой деструктор не вызывается. Это также может привести к поведению undefined и неправильному функционированию программы.

Суть в том, что... никогда не делайте этого.

Ответ 2

1) Undefined, но, вероятно, "работает". Деструкторы будут вызваны в освобождаемую память, которая по-видимому не захочет быть деконструированной.
2) Undefined, но, вероятно, "работает". Деструкторы НЕ будут вызваны.

т.е. ЕСЛИ он работает, и нет гарантии этого, тогда он будет, скорее всего, работать именно так, как требуется для базовых встроенных типов данных.