free()和delete()只是把指针所指向的内存释放掉,但是并没有把指针本身删除,也没有把指针置为NULL;
#include<iostream> using namespace std; int main(void) { char *p=(char *)malloc(100*sizeof(int)); strcpy(p,"Hello World"); cout<<"释放前指针p的地址:"<<&p<<endl; free(p); cout<<"释放后指针p的地址:"<<&p<<endl; if(p!=NULL) cout<<p<<endl; getchar(); }
运行结果:
从运行结果可以看出,指针p仍然存在,而且地址也没有变,只是指向了一大坨乱七八糟的东西。
free(p)之前:
free(p)之后:
因此:不等于NULL的指针不一定是有效的指针,指针初始化的时候不要忘记置为NULL,或者指向有效的地址,指针删除后也最好置为NULL
char *p=NULL; char *str=new char[100]; free(str); str=NULL;