2013-10-26 31 views
0

我有我的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; 

我通過迭代的酒吧,然後通過酒吧[] FOOS,然後做與富貴成員的東西。問題是,有時我得到var1,var2 ...的值的順序錯誤。
這隻發生在發佈配置;這也不會發生如果Foo的構造函數看起來像這樣: Foo(arg1 ...):var1(arg1)...
我想了解發生了什麼,爲什麼。

+1

你是說'var1'和'var2'得到*不正確的*值,或者這些值是正確的,但以意外的順序設置? – NPE

+0

值是正確的,如果我直接查詢它們,它們也顯示爲正確的順序。這隻會發生,如果我通過指針得到這些值。 – user2923240

+0

這很可能是您在某些指針算術中犯了錯誤。如果您懷疑有編譯器錯誤,您需要提供一個簡短的自包含的repro來展示該問題。用幾行僞代碼來診斷這類問題是不可能的。 –

回答

0

這確實是我的錯誤,也是一個愚蠢的錯誤。
Bar.foos指向另一個向量中的Foo對象,我忘了保留空間。所以這個矢量不斷擴大,使我的舊指針無效。自然,Foo物體本身沒什麼問題 - 它們只是其他地方。