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;
原文地址:https://www.cnblogs.com/qianwen/p/3831861.html