#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"。