指向for循环中声明的(本地)对象的指针范围

时间:2010-10-10 16:04:12

标签: c++ loops stack for-loop

我不确定下面的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

2 个答案:

答案 0 :(得分:1)

一旦块结束,编译器就会停止关注之前为它们保留的内存。但即使没有其他因素会破坏这一点,您还有另一个问题:int*中的所有vector<int*>指向同一个内存位置,因此它们的最终值都为i。< / p>

答案 1 :(得分:0)

答案取决于(像往常一样)编译器的实现。

你可能会得到指向同一位置的所有指针,其指向方向上有N的最新值。