free只能释放掉动态分配的指针。你的指针是int *p;有实际的存储单元(一般系统中为4个字节),来放指针指向的地址的。一般free和malloc等配合使用。
程序代码:#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int n=100;
int *p;
p=(int *)malloc(sizeof (int));
//p=&n; //此时的p已经不是指向用malloc分配的虚拟地址了,
//而是指向一个栈地址,栈没有所谓内存释放,只有进栈和出堆
*p=10;
printf("%d\n",n);
printf("%d\n",*p);
printf("%x\n",p);
free(p);
printf("%d\n",n);
printf("%d\n",*p);
printf("%x\n",p);
p=NULL;
printf("%d\n",n);
//printf("%d\n",*p); //p已经不指向任何内存了。
printf("%x\n",p);
system("pause");
return 0;
}









