【发布时间】:2011-12-01 12:59:07
【问题描述】:
可能重复:
Can a local variable's memory be accessed outside its scope?
做这样的代码(getIDs()返回一个指针)有什么令人担忧的事情:
class Worker{
private:
int workerID;
int departID;
int supervisorID;
public:
Worker()
{
workerID=0;
departID=0;
supervisorID=0;
name="anonymous";
workerAddress="none";
}
void setIDs(int worker, int depart, int supervisor)
{
workerID=worker;
departID=depart;
supervisorID=supervisor;
}
int* getIDs()
{
int id[3];
id[0]=workerID;
id[1]=departID;
id[2]=supervisorID;
return id;
}
};
然后,这样使用它:
Worker obj;
obj.setIDs(11,22,33);
cout<<(*obj.getIDs())<<endl;
cout<<++(*obj.getIDs())<<endl;
cout<<++(++(*obj.getIDs()))<<endl;
我对此感到疑惑,因为编译器显示:
警告 1 警告 C4172:返回局部变量的地址或 临时的
【问题讨论】:
-
这并不是真正的重复——在那个问题中,发帖人明白他们所做的事情不应该起作用,并且对它为什么起作用感到困惑。在这个问题中,发帖人想知道这是否可行。