Использование free внутри деструктора объекта, освобожденного с помощью delete

StackOverflow https://stackoverflow.com/questions/1635869

Вопрос

У меня есть объект, который я освобождаю с помощью delete, и у него есть char * , который освобождается с помощью free в своем деструкторе. Причина, по которой я использую free, заключается в том, что я использовал strdup и malloc при создании указателей char . Причина, по которой я использую malloc , заключается в том, что я использовал strdup для начала в большинстве путей кода. Приведет ли этот сценарий к повреждению памяти?

Это было полезно?

Решение

Нет, если вы правильно сопоставляете вызовы, то есть free () для памяти, выделенной с помощью malloc () и delete для памяти, выделенной с помощью новый , он будет работать нормально.

Другие советы

То, что вы делаете, правильно. Класс, который был new ed, должен быть освобожден с помощью delete , но если он владеет памятью, которая была выделена с помощью malloc (прямо или косвенно) тогда он должен освободить эту память с помощью free .

Ваша реализация верна. Вы используете free () для освобождения памяти, выделенной с помощью malloc () (или strdup ()), и это именно то, что нужно делать.

Требуется, чтобы вы освобождали память с примитивом, совпадающим с тем, который использовался для выделения этой памяти. И это требование выполняется в вашей реализации.

Я понял, что случилось. Я передавал свой объект как копию через метод, и он сохранял char * ; при выходе из функции этот временный объект удалялся, освобождая char * . Теперь мне нужно char * после выхода из метода, но теперь этого нет. Два * и минус один исправили это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top