free()和delete()只是把指针所指向的内存释放掉,但是并没有把指针本身删除,也没有把指针置为NULL;
#include<iostream>
using namespace std; int main(void)
{
char *p=(char *)malloc(*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[]; free(str);
str=NULL;