范围

2014-10-17 52 views
-3

为follwoing程序段:范围

std::vector<int*> v; 
{ 
    int a=5000; 
    int *aa =&a; 
    vv.push_back(aa); 
    cout<<"\n"<<*(v[0]); 
} 
cout<<"\n"<<*(v[0]); 

输出:

5000 
5000 

我的疑问这里如果插入指针到一个载体,载体应具有地址和虽然从当地块以外的地方进行访问,但不应打印元素,因为“a”具有局部范围。 这里指针的oject具有局部范围,它仍然可以从范围之外访问它。 plese帮助。 谢谢

+3

这是未定义的行为 – 2014-10-17 14:08:15

+0

访问陈旧的指针。看[这个答案](http://stackoverflow.com/a/6445794/1782465)。 – Angew 2014-10-17 14:10:08

+0

“Stale指针”。我喜欢这个表情。 – Quentin 2014-10-17 14:11:09

回答

5

向量抓取指针的副本,它是完全有效的使用它。

问题是与将指针指向地址:你所访问可能已被再循环外的范围堆栈存储器(即使用)。您对此访问无法保证,因此请求undefined behavior

+0

那是真的,谢谢..更多的疑问 – 2014-10-17 14:23:05

+0

std :: vector v; { int a = 5000; vv.push_back(a); cout <<“\ n”<< v [0]; } cout <<“\ n”<< v [0]; 输出: 5000 ::这里的的Pusing元素矢量时是创建一个新的elment然后添加到载体列表或其指向同一elment堆栈上,如果以后为真,则上述之一,也是不确定的行为。 ? – 2014-10-17 14:26:01

+0

不行,这很好。它正在复制向量中的元素。 – 2014-10-17 14:28:21