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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int * p = (int *)malloc(sizeof(int)), * pp;
    printf("%p :: %i\n", p, *p);
    printf("%p :: %i\n", pp, *pp);
    free(p);
    pp = malloc(sizeof(int));
    printf("%p :: %i\n", p, *p);
    printf("%p :: %i\n", pp, *pp);
    *p = 2;
    printf("%p :: %i\n", p, *p);
    printf("%p :: %i\n", pp, *pp);
    
    *pp = 3;
    printf("%p :: %i\n", p, *p);
    printf("%p :: %i\n", pp, *pp);    
    
    free(pp);
 
    return 0;
}

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

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

  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
Похожие ответы