Почему после освобождения памяти получается записать туда значение - C (СИ)
Формулировка задачи:
Здравствуйте!
Вот код:
После этого маленького теста, обнаружил, что абсолютно не понимаю работу ф-й malloc и free.
Почему после освобождения памяти , я могу спокойно записать туда значение (11 строка)?
#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; }
Решение задачи: «Почему после освобождения памяти получается записать туда значение»
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; }
Объяснение кода листинга программы
В данном коде объявлены две переменные:
- p типа int, которая указывает на память, выделенную динамически с помощью функции malloc. Значение этой переменной равно 2027637560.
- pp типа int, которая изначально не содержит значения, так как ей не выделена память. Далее, в цикле, сначала выводится значение переменной p и её адрес, затем значение переменной pp и её адрес. После чего, с помощью функции free освобождается память, которую занимала переменная p. Затем, снова выделяется память с помощью функции malloc, но уже для переменной pp. Значение переменной pp после выделения памяти равно 2027637552. Далее, в цикле, сначала выводится значение переменной p и её адрес, затем значение переменной pp и её адрес. После чего, переменной p присваивается значение 2 и снова выводится её значение и адрес. Затем, переменной pp присваивается значение 3 и снова выводится её значение и адрес. Наконец, функция free освобождает память, которую занимала переменная pp, и возвращается 0, завершая работу программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д