【问题标题】:Swapped member values交换成员值
【发布时间】:2013-10-26 16:14:39
【问题描述】:

我的 Visual C++ 2010 代码中有这样的内容:

struct Foo
{
  Foo( int arg1, int arg2..)
  {
    var1=arg1;
    var2=arg2;
    ...
  };
  int var1;
  int var2;
  ...
};

struct Bar
{
  Bar(){};
  vector<Foo*> foos
}

vector<Bar> bars;

我正在遍历 bar,然后遍历 bar[].foos,然后对 Foo 成员做一些事情。问题是有时我会以错误的顺序获取 var1、var2... 的值。
这只发生在发布配置中;如果 Foo 构造函数如下所示,这也不会发生: 富 (arg1...):var1(arg1)...
我想了解发生了什么以及为什么。

【问题讨论】:

  • 您是说var1var2 得到不正确 值,还是说这些值是正确的但以意外的顺序设置?
  • 值是正确的,如果我直接查询它们,它们的顺序似乎也正确。只有当我通过指针获取这些值时才会发生这种情况。
  • 很可能你在某些指针运算中犯了错误。如果您怀疑存在编译器错误,则需要提出一个简短的独立重现来演示该问题。用几行伪代码是不可能诊断出这类问题的。

标签: visual-c++ compiler-optimization


【解决方案1】:

这确实是我的错误,而且是愚蠢的。
Bar.foos 指向另一个向量中的 Foo 对象,我忘记为其保留空间。所以这个向量不时地扩大,使我的旧指针无效。当然,Foo 对象本身很好——它们只是在其他地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-28
    • 2023-04-10
    • 1970-01-01
    • 2019-03-13
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多