Visual c++ 交换的成员值 我在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; structfoo { Foo(int arg1,int arg2..) { var1=arg1; var2=arg2; ... }; int-var1; int-var2; ... }; 结构条 { Bar(){}; 矢量食物 } 矢量条;

Visual c++ 交换的成员值 我在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; structfoo { Foo(int arg1,int arg2..) { var1=arg1; var2=arg2; ... }; int-var1; int-var2; ... }; 结构条 { Bar(){}; 矢量食物 } 矢量条;,visual-c++,compiler-optimization,Visual C++,Compiler Optimization,我先遍历bars,然后遍历bars[].foos,然后与Foo成员一起做一些事情。问题是有时候我会得到var1,var2的值。。。顺序错误。 这只发生在发布配置中;如果Foo构造函数如下所示,也不会发生这种情况: Foo(arg1…):var1(arg1). 我想知道发生了什么以及为什么。这确实是我的错误,而且是愚蠢的错误。 Bar.foos指向另一个向量中的Foo对象,我忘了为它保留空间。所以这个向量不断扩展,使得我的旧指针无效。当然,Foo对象本身很好——它们只是在其他地方。你是说var1和

我先遍历bars,然后遍历bars[].foos,然后与Foo成员一起做一些事情。问题是有时候我会得到var1,var2的值。。。顺序错误。
这只发生在发布配置中;如果Foo构造函数如下所示,也不会发生这种情况: Foo(arg1…):var1(arg1).

我想知道发生了什么以及为什么。

这确实是我的错误,而且是愚蠢的错误。

Bar.foos指向另一个向量中的Foo对象,我忘了为它保留空间。所以这个向量不断扩展,使得我的旧指针无效。当然,Foo对象本身很好——它们只是在其他地方。

你是说
var1
var2
得到了不正确的值,还是说值是正确的,但设置的顺序出乎意料?值是正确的,如果我直接查询它们,它们的顺序似乎也是正确的。只有通过指针获取这些值时才会发生这种情况。很可能是您在某些指针算法中犯了错误。如果您怀疑编译器有bug,您需要拿出一个简短的自包含的repro来演示这个问题。用几行伪代码来诊断这类问题是不可能的。