首页 > 代码库 > free 或delete后指针怎么样了

free 或delete后指针怎么样了

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;