c语言的简单问题,有点看不懂这个。

#include<stdio.h>
#include<malloc.h>
int main()
{
    int *p;
    p=(int *)malloc(2*sizeof(int));
    free(p);
    if(p)
    printf("error");
    else printf("right");
    return 0;
}

free后不是都释放的吗,那为什么还输出error,不输出right呢?

free作用是释放指针所指向的空间,释放空间后指针会变成一个野指针(不指向任何地方的指针),但是指针本身任然有值,所以通过free释放空间后应当吧指针置为NULL

 free(p);

p = NULL;

 

就可以达到你的目的。

free只是你不能访问它指向的地址了,但是P本身是一个变量,也就是一个地址。它的值又不会变,你又没有给它赋值。

free后只是不能访问,但是指针p的值未改变,所以会输出"error"。