我不确定下面的C ++代码片段是否合法:
std::vector<int*> myints;
for (int i = 0; i<N; i++) {
int j = i;
myints.push_back(&j);
}
for (int i=0; i<myints.size(); i++) cout<<*(myints[i])<<endl;
编译器如何处理这个?我理解变量 j 本身在退出for循环时超出范围,但是整数会在堆栈上本地分配N次,以便向量中的元素指向的int对象在外部保持有效循环?
非常感谢! -bert
答案 0 :(得分:1)
一旦块结束,编译器就会停止关注之前为它们保留的内存。但即使没有其他因素会破坏这一点,您还有另一个问题:int*
中的所有vector<int*>
指向同一个内存位置,因此它们的最终值都为i
。< / p>
答案 1 :(得分:0)
答案取决于(像往常一样)编译器的实现。
你可能会得到指向同一位置的所有指针,其指向方向上有N的最新值。