Использование free внутри деструктора объекта, освобожденного с помощью delete - PullRequest
2 голосов
/ 28 октября 2009

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

Ответы [ 4 ]

5 голосов
/ 28 октября 2009

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

2 голосов
/ 28 октября 2009

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

1 голос
/ 28 октября 2009

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

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

0 голосов
/ 11 августа 2014

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

...