2016-08-13 6 views
1

に引数として構造体を渡すときに、私はC++にはかなり新しいですし、私が説明することはできませんか理解していない何かに遭遇しています。異常な値のx64

Iは、構造体を定義し、その型の変数を作成し、関数を引数として渡し、単純なプログラムを有しています。

struct Vector3 
{ 
    float X, Y Z; 
}; 

static void test(Vector3 x) 
{ 
} 

int main() 
{ 
    Vector3 x = { 100.0f, 100.0f, 0.0f }; 
    test(x); 
    return 0; 
} 

x86構成で実行しているときに、テスト関数のx引数を調べると、期待通りのものになります。 X = 100.0f、Y = 100.0f、Z = 0.0f。

これをx64に変更すると、デバッガで引数を調べると、値X = 4.23084696e-37、Y = 2.648e-43#DEN、Z = -107374176が得られます。

私が代わりにポインタを取るためにテストを変更する場合は、値が再び賢明に見えます。

なぜ彼らが構築されたとx64で動作しているときにのみ異なっていますか?

上記は、私が抱えている問題を示しています。実際のコードでは、位置ベクトルを描画スプライト関数に渡しています。これは、開いたglでスプライトを描画するために使用される変換行列を計算しています。しかし、私がどのように渡すかによって、異なる変換が計算されるようです。上記の原因がこの問題の原因か、それとも何か他のものか

+0

実行ファイルを最適化しましたか? – JVApen

+2

アプリケーションの最適化されたリリースビルドをデバッグしようとすると正常です。 VS2015を使用している場合は、もともとは多くのデバッガのバグでリリースされていたアップデートを確実に適用してください。 –

+0

@HansPassant VSのバグのようです。私は更新3にアップグレードし、ウォッチウィンドウが正しく動作するようになりました。あなたが答えたら、私は受け入れられた答えとしてあなたをマークします:) – Terry

答えて

1

これはVisual Studio 2015のバグが原因だったようです。アップデート3にアップグレードすると問題が解決しました。