zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    artTemplate的使用总结
    死锁的简单实现
    代理模式
    装饰器模式
    建造者模式
    工厂模式
    单例模式
    linux查看日志内容
    系统信息及系统操作
    设计模式-建造者模式
  • 原文地址:https://www.cnblogs.com/qianwen/p/3831861.html
Copyright © 2011-2022 走看看