Как работает "освободить / удалить"?
Возможные дубликаты:
Как удаление работает в C++?
Программирование на C: как free знает, сколько стоит free?
Для каждого динамического выделения памяти, используя 'malloc / new', у нас есть методы 'free / delete', чтобы освободить выделенную память.
Мой вопрос: если размер выделения памяти определяется во время выполнения и места памяти не являются смежными, как эти методы освобождения памяти знают, сколько памяти нужно освободить и какие места памяти следует очистить?
Что заставляет эти функции работать, если мы передаем им только указатель на одно местоположение?
2 ответа
Когда malloc/new
выделяет память, он также записывает, где и сколько памяти он выделил для указателя на данную ячейку памяти. free/delete
ищет, какую память освободить, когда вы даете ей указатель.
Вот почему вы никогда не должны пытаться освободить указатель, который вы переместили с "+=" или что-то подобное.
Они отслеживают, сколько памяти вы выделили для внутреннего использования.