gpt4 book ai didi

c++ - 为什么悬挂指针可以继续访问对象?

转载 作者:搜寻专家 更新时间:2023-10-31 01:02:45 26 4
gpt4 key购买 nike

<分区>

我对野指针和悬挂指针的一些细节感到困惑,这是我的代码:

#include <iostream>
using std::cout;
using std::endl;

class A
{
public:
void Func() { cout << "Func of class A, the address is:" << this <<endl; }
};

void Test(void)
{
A *p;

//get an error in VS2013 because of uninitialized pointer.
//But it's ok in g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
p->Func(); // wild pointer, ((1))

{
A a;
p = &a;
p->Func();
}

p->Func(); //dangling pointer ((2))
}

int main()
{
Test();
return 0;
}

结果如下:
window :
A类函数,地址为:003CFD47
A类函数,地址为:003CFD47

Ubuntu:
A类函数,地址为:0xb74ef39d
A类函数,地址为:0xbff85a3b
A类函数,地址为:0xbff85a3b

我的问题:
(1) g++ 编译器让 wile 指针在 ((1)) 处传递,即使在运行代码时,它似乎指向“某个对象”。为什么会这样?是编译器的bug吗?

(2) 据我所知,在 block 句之后,p 将是指向((2)) 的悬空指针。但是为什么p可以继续指向Func()呢?因为对象a占用的空间没有被其他应用覆盖?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com