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

  • 相关阅读:
    E-Eating Together(POJ 3670)
    F-Dining Cows(POJ 3671)
    I-MooFest(POJ 1990)
    A-Apple Catching(POJ 2385)
    H-The Cow Lineup(POJ 1989)
    LOOPS(HDU 3853)
    Card Collector(HDU 4336)
    Help Me Escape (ZOJ 3640)
    Collecting Bugs(POJ 2096)
    c#大圣之路笔记——c# 从DataGrid中导出数据 Session
  • 原文地址:https://www.cnblogs.com/likemao/p/8623801.html
Copyright © 2011-2022 走看看