free()将内存初始化为0

时间:2017-08-15 16:30:45

标签: c free

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

当我在执行p语句后检查分配给free(p)的内存地址时,我发现内存内容为0.这是正确的行为,因为我已经读过{{1没有将内存初始化为0?

1 个答案:

答案 0 :(得分:3)

*p返回后free(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
}