指针到堆栈存储器

class object
{
public:
    object(){}
    ~object(){}
};

int main()
{
    object *p = NULL;
    {
         object a;
         p = &a;
         if(p){
             cout << "not NULL\n";
         }
         else{
             cout << "NULL ptr\n";
         }
    }
    if(p){
        cout << "not NULL\n";
    }
    else{
        cout << "NULL ptr\n";
    }
    return 1;
}

结果:

  

不为NULL   不为空


我不知道为什么会这样,我认为它是“ not NULL”和“ NULL”。调用object的析构函数时,p指向什么?堆栈内存如何工作?

shiyan5168 回答:指针到堆栈存储器

a被销毁时,p成为悬挂指针。它是一个不为null的指针,但仍具有未定义行为对其进行取消引用。

那是因为一个垂死的对象不会开始更改程序中各处的值。如果程序中到处都有一个垂死对象的指针,该怎么办?您不能仅仅将它们的所有值神奇地更改为nullptr。如果您希望这些指针变为nullptr,则必须自己影响这些值。

本文链接:https://www.f2er.com/3108489.html

大家都在问