zoukankan      html  css  js  c++  java
  • 什么时候删除指针后,要给指针赋NULL

    删除后需要赋NULL:

    1、当在一个类里的时候,删除类的某个成员对象,需要给它赋NULL,以防其他地方使用这个成员的时候,不知道这个成员是否存在

    eg:

    ref1::ref1()
    {
        tPint = new int(5);
    
        if (tPint) {
            delete tPint;
            tPint = NULL;
        }
        
        if (tPint)
            cout << *tPint << endl;
        else
            cout << "no exist" << endl;
    }

    删除后不需要赋NULL:

    1、类的析构函数里删除成员memberA,不需要赋NULL,因为这个类对象都被删除了,那它的成员就算赋NULL了,其他地方用到这个memberA在调试版本下也无法通过If(memberA)来判断这个成员是否存在,被删除的数据都会赋0xdd;

    eg:

    0xcdcdcdcd - Created but not initialised
    0xdddddddd - Deleted
    0xfeeefeee - Freed memory set by NT's heap manager
    0xcccccccc - Uninitialized locals in VC6 when you compile w/ /GZ
    0xabababab - Memory following a block allocated by LocalAlloc()


    VC++在Debug编译方式编译的程序中,会跟踪用new分配的内存。新分配的内存会用0xcd(助记词为Cleared Data)填充,防止未初始化;当它被delete后,又会被0xdd(Dead   Data)填充,防止再次被使用。这样有利于调试内存错误。之所以选这样的填充模式,是因为:

    1.大数,若被当成指针就会越界 

    2.奇数,指针通常指向偶数地址  

    3.非0,这样不会和   NULL   混淆。 


    在Release版中不会有这些字节填充。


    引用地址:http://blog.csdn.net/mxclxp/article/details/7524176

  • 相关阅读:
    brew
    hbase
    YARN常见问题以及解决方案
    mybatis中foreach collection三种用法
    mysql按分隔符输出多行
    mysql DATETIME
    iis 之给网站添加MIME映射
    VS2019专业版和企业版激活密钥
    ViewData对于从后台传list到前台的使用
    找出每组数据中不同distinct
  • 原文地址:https://www.cnblogs.com/likemao/p/8623801.html
Copyright © 2011-2022 走看看