林锐的《高质量C++/C编程指南》中的一个例子
#include <iostream>
using namespace std;
class A
{
public :
void Func(void){cout << "Func of class A/n/n";}
};
void Test(void)
{
A *p;
{
A a;
p = &a;
}
p->Func();
}
int main(void)
{
Test();
return 0;
}
执行p->Func()时,对象a已消失,而p是指向a的,所以就成了野指针
但奇怪的是作者在运行是没有出错,说可能是与编译器有关
我添加了一个整型指针,自己测试了一下:
#include <iostream>
using namespace std;
class A
{
public :
void Func(void){cout << "Func of class A/n/n";}
};
void Test(void)
{
A *p;
int *pi;
{
A a;
p = &a;
int ii = 90;
pi = ⅈ
}
p->Func();
cout << "*pi = " << *pi << endl;
}
int main(void)
{
Test();
return 0;
}
我运行的时候也没有出错
后面添加的整数指针的测试也没有错
但是我试着把变量声明和变量赋值的过程提出来后,A指针没有错,整型指针却出错了:
#include <iostream>
using namespace std;
class A
{
public :
void Func(void){cout << "Func of class A/n/n";}
};
A *p;
int *pi;
void forTest(void)
{
A a;
p = &a;
int ii = 90;
pi = ⅈ
}
void Test(void)
{
forTest();
p->Func();
cout << "*pi = " << *pi << endl;
}
int main(void)
{
Test();
return 0;
}
指针指向的内容超出作用域范围,或是指针被释放之后,究竟会产生怎样的操作呢,“内容消失”代表什么?
是用其他的内容填充呢?还是内容不变,空间留着以后用。