Почему после освобождения памяти получается записать туда значение - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Вот код:
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int * p = (int *)malloc(sizeof(int));
  6. printf("%p :: %i\n", p, *p);
  7. free(p);
  8. printf("%p :: %i\n", p, *p);
  9. *p = 2;
  10. printf("%p :: %i\n", p, *p);
  11. return 0;
  12. }
После этого маленького теста, обнаружил, что абсолютно не понимаю работу ф-й malloc и free. Почему после освобождения памяти , я могу спокойно записать туда значение (11 строка)?

Решение задачи: «Почему после освобождения памяти получается записать туда значение»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.     int * p = (int *)malloc(sizeof(int)), * pp;
  7.     printf("%p :: %i\n", p, *p);
  8.     printf("%p :: %i\n", pp, *pp);
  9.     free(p);
  10.     pp = malloc(sizeof(int));
  11.     printf("%p :: %i\n", p, *p);
  12.     printf("%p :: %i\n", pp, *pp);
  13.     *p = 2;
  14.     printf("%p :: %i\n", p, *p);
  15.     printf("%p :: %i\n", pp, *pp);
  16.    
  17.     *pp = 3;
  18.     printf("%p :: %i\n", p, *p);
  19.     printf("%p :: %i\n", pp, *pp);    
  20.    
  21.     free(pp);
  22.  
  23.     return 0;
  24. }

Объяснение кода листинга программы

В данном коде объявлены две переменные:

  1. p типа int, которая указывает на память, выделенную динамически с помощью функции malloc. Значение этой переменной равно 2027637560.
  2. pp типа int, которая изначально не содержит значения, так как ей не выделена память. Далее, в цикле, сначала выводится значение переменной p и её адрес, затем значение переменной pp и её адрес. После чего, с помощью функции free освобождается память, которую занимала переменная p. Затем, снова выделяется память с помощью функции malloc, но уже для переменной pp. Значение переменной pp после выделения памяти равно 2027637552. Далее, в цикле, сначала выводится значение переменной p и её адрес, затем значение переменной pp и её адрес. После чего, переменной p присваивается значение 2 и снова выводится её значение и адрес. Затем, переменной pp присваивается значение 3 и снова выводится её значение и адрес. Наконец, функция free освобождает память, которую занимала переменная pp, и возвращается 0, завершая работу программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы