悬空指针仍在访问内存值

时间:2016-03-08 20:35:11

标签: c++ pointers dangling-pointer

我对这个概念很陌生,我很困惑,如果一个悬空指针是指向指向已释放或删除的内存的内存位置的指针,那么在这种情况下为什么它仍然可以调用函数test()

#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;

class MyClass{

    public:
    void test(){

        cout<< "just checking"<<endl;

        }

    };

int main(int argc, char **argv)
{
    MyClass *p ( new MyClass());; 
    MyClass  *q = p;
    delete p;
    q->test();

    p = NULL;
    q->test();
    return 0;
}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

Delete运行类的析构函数,并将内存标记为已释放。如果析构函数没有做任何太具破坏性的事情,并且如果内存还没有被重新分配用于其他目的,那么该对象变成了一个基本上是僵尸的东西:它看起来有点像生活中的一个,但实际上是准备吃你的大脑。

不要让你的大脑被吃掉。