Использование free внутри деструктора объекта, освобожденного с помощью delete
-
06-07-2019 - |
Вопрос
У меня есть объект, который я освобождаю с помощью delete, и у него есть char *
, который освобождается с помощью free в своем деструкторе. Причина, по которой я использую free, заключается в том, что я использовал strdup и malloc
при создании указателей char
. Причина, по которой я использую malloc
, заключается в том, что я использовал strdup для начала в большинстве путей кода. Приведет ли этот сценарий к повреждению памяти?
Решение
Нет, если вы правильно сопоставляете вызовы, то есть free ()
для памяти, выделенной с помощью malloc ()
и delete
для памяти, выделенной с помощью новый
, он будет работать нормально.
Другие советы
То, что вы делаете, правильно. Класс, который был new
ed, должен быть освобожден с помощью delete
, но если он владеет памятью, которая была выделена с помощью malloc
(прямо или косвенно) тогда он должен освободить эту память с помощью free
.
Ваша реализация верна. Вы используете free () для освобождения памяти, выделенной с помощью malloc () (или strdup ()), и это именно то, что нужно делать.
Требуется, чтобы вы освобождали память с примитивом, совпадающим с тем, который использовался для выделения этой памяти. И это требование выполняется в вашей реализации.
Я понял, что случилось. Я передавал свой объект как копию через метод, и он сохранял char *
; при выходе из функции этот временный объект удалялся, освобождая char *
. Теперь мне нужно char *
после выхода из метода, но теперь этого нет. Два *
и минус один исправили это.