悬空指针仍在访问内存值

dangling pointer is still accessing the memory value

本文关键字:内存 访问 空指针      更新时间:2023-10-16

我对这个概念很陌生,我很困惑,如果悬空指针是指向内存位置的指针,该内存位置指向已释放或删除的内存,那么在这种情况下,为什么它仍然能够调用函数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;
}

任何帮助将不胜感激。

Delete 运行类的析构函数,并将内存标记为已释放。如果析构函数没有做任何破坏性太强的事情,并且如果内存尚未被重新分配用于其他目的,那么该对象基本上会变成僵尸:它看起来有点像活人之一,但真的准备吃掉你的大脑。

不要让你的大脑被吃掉。