Делает ли указатель NULL освобождение памяти?

0

В следующем коде я действительно освобожу память, занятую указателем? Если нет, то как я могу освободить память? Здесь я не хочу, чтобы удалить но указатель. a

int a = 1;
int* p;
p = &a;
p = NULL;
  • 0
    он будет освобожден, когда a выходит из области видимости
Теги:
pointers

4 ответа

2

Нет, он просто присваивает значение указателя NULL.

Для вашего конкретного примера, это выглядит как переменная стека, так что вы не можете a free его в любом случае. Вы можете освобождать память, вызывая delete в памяти, которое выделяется в куче, используя new.

Что касается вопроса: "Как я могу освободить память", выделенная таким образом память обычно не требуется освобождать. Если вы находитесь внутри функции, память автоматически перерабатывается, когда функция завершается. Если переменная распределена глобально, она никогда не освобождается до конца программы.

Редактировать (ответ на редактирование OP): указатель также выйдет из области действия, если контекст, который он определен в результатах возврата. Вы не можете явно освобождать указатель, если он не был создан с использованием new.

  • 0
    Также обратите внимание, что если p был выделен в куче, просто установка его в NULL вызывает утечку памяти.
  • 1
    Это C ++, поэтому malloc не должен быть задействован.
Показать ещё 3 комментария
2

a объявляется в стеке, поэтому вам не нужно его освобождать. Вы должны освободить объект, выделенный new используя delete.

См. Здесь дополнительную информацию о куче и стеке.

  • 0
    или malloc с free
  • 0
    @clcto Это C ++, поэтому нет причин использовать malloc и free .
Показать ещё 3 комментария
0

Переменная a сохраняется в стеке не в динамической памяти, мы освобождаем только память, которая выделяется нами средствами sing malloc, calloc, alloc, а не системой. И память a автоматически удаляется, когда она выходит из сферы действия

0

Вам нужно free если и только если у вас есть alloc.

Поскольку вы только что назначили указателю p, не выделенному, вам не нужно освобождать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню