malloc()
и его резервное пространство в области памяти, называемой «кучей», и возвращает указатель на эту зарезервированную область.Таким образом, в приведенном выше примере p
указан указатель на, вероятно, четырехбайтовую область памяти, которая была зарезервирована для ее использования (адрес которой на этот раз 154804232).Когда вы делаете *p = 10
, вы помещаете целое значение 10
в указанную память.Когда вы делаете q = p
, вы теперь заставляете q
указывать на тот же кусок зарезервированной памяти кучи.
free()
и его значение просто unreserve память.Когда вы звоните free()
, вы говорите: «Я больше не буду использовать эту память».Все, что free()
делает, это сообщает системе управления памятью, что блок памяти снова доступен для использования. Он решительно не меняет ваш указатель. Он просто сигнализирует о наличии блока памяти.После этого вам остается убедиться, что вы не используете этот указатель снова.
Если вы снова используете этот указатель, он может работать нормально.Однажды.Или дважды.Или тысячу раз.В принципе, он будет работать нормально, пока вы не будете использовать его после того, как кто-то еще скажет, что указанный вами блок памяти свободен и что-то с ним сделает.Когда это произойдет, случается плохое .Пожалуйста, не делай плохих вещей.