After a heap value has been read, free releases the storage back to the allocator.

Free Memory

free_memory.c
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int value = ;
    int *ptr = (int *)malloc(sizeof(int));

    if (ptr == 0) {
        return 1;
    }

    *ptr = value;
    int saved = *ptr;

    free(ptr);
    ptr = 0;

    printf("released=%d value=%d\n", ptr == 0, saved);
    return 0;
}
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int value = ;
    int *ptr = (int *)malloc(sizeof(int));

    if (ptr == 0) {
        return 1;
    }

    *ptr = value;
    int saved = *ptr;

    free(ptr);
    ptr = 0;

    printf("released=%d value=%d\n", ptr == 0, saved);
    return 0;
}
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int value = ;
    int *ptr = (int *)malloc(sizeof(int));

    if (ptr == 0) {
        return 1;
    }

    *ptr = value;
    int saved = *ptr;

    free(ptr);
    ptr = 0;

    printf("released=%d value=%d\n", ptr == 0, saved);
    return 0;
}
release `free(ptr)` releases heap storage previously returned by `malloc`.
clear pointer Setting the pointer to `0` after `free` avoids accidentally reusing the old address.