【问题标题】:scope of pointers to (local) objects declared within a for loop指向在 for 循环中声明的(本地)对象的指针范围
【发布时间】:2010-10-10 16:04:12
【问题描述】:

我不确定下面C++代码的sn-p是否合法:

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 对象在外部保持有效循环?

非常感谢! -伯特

【问题讨论】:

  • 你的目标是什么?为什么你有vector&lt; int * &gt; 而不是vector&lt; int &gt;
  • 只是一个例子,int 可以是任何对象。

标签: c++ loops stack for-loop


【解决方案1】:

一旦块结束,编译器就会停止关心之前为它们保留的内存。但是,即使没有其他任何干扰,你还有另一个问题:vector&lt;int*&gt; 中的所有int*s 都指向同一个内存位置,所以它们的最终值都是i

【讨论】:

  • 嗯,但是当我运行它时,我得到了我天真地期望的结果,即打印 0、1、2、...的值。这是因为如果 N 已知或类似的想法,编译器会展开循环吗?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2016-03-04
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    相关资源
    最近更新 更多