我感到困惑野指針和野指針的一些細節,這裏是我的代碼:爲什麼懸掛指針可以繼續訪問對象?
#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;
}
結果就像如下:
的Windows:
Func of class A, the address is:003CFD47 Func of class A, the address is:003CFD47
Ubuntu的:
Func of class A, the address is:0xb74ef39d Func of class A, the address is:0xbff85a3b Func of class A, the address is:0xbff85a3b
我的問題:
(1)g ++編譯器讓wil在((1))處傳遞e指針,即使運行代碼,它似乎指向'某個對象'。爲什麼會這樣呢?它是編譯器的錯誤嗎? (2)據我所知,在塊句之後,p將是((2))處的懸掛指針。但爲什麼可以繼續指向Func()?由於對象a佔用的空間不會被其他應用程序覆蓋嗎?
這是不確定的行爲。 – 2014-10-29 08:02:44
這是?懸掛指針?@πάνταῥεῖ – kkwang 2014-10-29 08:03:34
@wjk訪問/取消引用它。 – 2014-10-29 08:04:13