zoukankan      html  css  js  c++  java
  • free和delete把指针怎么啦?

    别看freedelete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。

    用调试器跟踪示例7-5,发现指针pfree以后其地址仍然不变(非NULL),只是该地址对应的内存是垃圾,p成了“野指针”。如果此时不把p设置为NULL,会让人误以为p是个合法的指针。

    如果程序比较长,我们有时记不住p所指的内存是否已经被释放,在继续使用p之前,通常会用语句if (p != NULL)进行防错处理。很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指针,它也不指向合法的内存块。

    char *p = (char *) malloc(100);
        strcpy(p, “hello”);
        free(p);        // p 所指的内存被释放,但是p所指的地址仍然不变
        …
        if(p != NULL)    // 没有起到防错作用
        {
           strcpy(p, “world”);    // 出错
    }

     



  • 相关阅读:
    连通分量板子
    2017年7月17日
    强连通缩点— HDU1827
    马拉车代码
    表达式求值
    Gym-100883F、Gym-101095B状态压缩小结
    矩阵快速幂小结-Hdu2604
    3月27日
    简单移动端自适应轮播图
    上了热搜榜前端工程师面试内幕
  • 原文地址:https://www.cnblogs.com/XiHua/p/3807850.html
Copyright © 2011-2022 走看看