free() 将内存初始化为 0

free() initialising memory to 0

int main() 
{   
    int *p,*q;  
    p=(int *)malloc(sizeof(int));   
    *p=5;   
    free(p);
} 

当我在执行 free(p) 语句后检查分配给 p 的内存地址时,我观察到内存内容为 0。这是正确的行为吗,因为我已阅读 free不初始化内存为0?

free(p)returns之后*p的内容未定义。它可能是 0、42 或其他任何值。

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

int main(void) {
    int *p, *x;

    p = malloc(sizeof(int));
    *p = 5;

    // the following will print "0x7fd0cac00350: 5" or similar
    printf("%p: ", p);
    printf("%d\n", *p);

    free(p);

    printf("%p\n", p); // won't change from before
    printf("%d\n", *p); // UNDEFINED BEHAVIOR
}