• 什么时候删除指针后,要给指针赋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

  • 相关阅读:
    POJ1806 Manhattan 2025
    POJ1258 AgriNet【最小生成树】
    POJ1789 Truck History【最小生成树】【终于AC了】
    memset的用法
    HDOJ1106 排序
    POJ2965
    414某OJ竞赛题
    HDOJ1745 I hate it【线段树】
    HDOJ2795 Billboard【线段树】
    蓝桥杯o(︶︿︶)o 唉
  • 原文地址:https://www.cnblogs.com/likemao/p/8623801.html
Copyright © 2020-2023  润新知