C++ c+中向量元素的范围+;stl

C++ c+中向量元素的范围+;stl,c++,stl,C++,Stl,对于以下程序段: std::vector<int*> v; { int a=5000; int *aa =&a; vv.push_back(aa); cout<<"\n"<<*(v[0]); } cout<<"\n"<<*(v[0]); 我怀疑如果插入指向向量的指针,向量应该有地址,并且当从本地块外部访问它时,它不应该打印元素,因为“a”有本地范围。 在这里,指针的对象仍然具有本地作用域,可以

对于以下程序段:

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

我怀疑如果插入指向向量的指针,向量应该有地址,并且当从本地块外部访问它时,它不应该打印元素,因为“a”有本地范围。 在这里,指针的对象仍然具有本地作用域,可以从作用域之外访问它。 请帮忙。
感谢

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


问题在于指针指向的地址:您正在访问可能已回收(即已使用)的范围外堆栈内存。您无法保证此访问并因此调用。

访问过期指针是未定义的行为。请参阅“陈旧指针”。我喜欢这个表达式。Pro提示:不要使用裸的原始指针,特别是在C++中,你有所有的工具来避免它们,并表达更好的语义,在你真的真的需要其中一个东西的时候,你也会得到智能指针。C++不是一个管理语言。不要期望编译器或运行时识别指针是否仍然有效。那是编码员的工作。那是真的,谢谢。。向量v;{int a=5000;vv.push_back(a);coutnope,这很好。它正在复制向量中的元素。使用不指向有效位置的指针是无效的。也就是说,即使在取消引用之前,您也有问题。从技术上讲。
5000
5000