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; }