Как освободить пространство указателя в памяти? - PullRequest
8 голосов
/ 04 июля 2011

У меня есть вопрос об указателях на C. Каждый указатель имеет 4 байта в памяти (адрес).Когда я вызываю malloc (), он только выделяет память и помещает свой адрес в указатель, также free () только освобождает память, на которую указывает указатель.Но как я могу удалить указатель (4 байта) в памяти, которая мне больше не нужна?Нет ли утечки памяти?

Ответы [ 5 ]

12 голосов
/ 04 июля 2011

Сам указатель является обычной переменной, что означает, что когда он выходит из области видимости, эти 4 байта, выделенные для него, автоматически освобождаются, как и любая другая переменная, которую вы могли бы объявить в той же области.

7 голосов
/ 04 июля 2011

Сама переменная-указатель обычно имеет автоматическую продолжительность хранения, т. Е. Находится в стеке, поэтому занимаемая ею память будет возвращена и использована повторно, как только переменная выйдет из области видимости.

3 голосов
/ 04 июля 2011

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

2 голосов
/ 04 июля 2011

Указатель - это просто нормальная переменная, имеющая то же время жизни, что и обычная переменная. Если это локальная нестатическая переменная, ее время жизни заканчивается, когда она выходит из области видимости. Если это переменная со статической продолжительностью хранения, ее время жизни заканчивается, когда программа заканчивается. Если он расположен в динамически распределенной памяти, его время жизни заканчивается, когда эта память освобождается, и для будущего стандарта C1x, если это локальная переменная потока, его время жизни заканчивается, когда заканчивается поток.

0 голосов
/ 13 августа 2017

в скорлупе ореха .. вы не можете освободить место указателя или память с помощью любого кода или команды .. поскольку вы, возможно, захотите создать идеальную программу кодов .. с острым потреблением памяти .. я понял..но ты не можешь .. спасибо ..

...