2016-08-13 1 views
1

Ich bin ziemlich neu in C++ und bin auf etwas gestoßen, das ich nicht erklären oder nicht verstehen kann.Ungewöhnliche Werte im Überwachungsfenster beim Übergeben von struct als Argument in x64

Ich habe ein einfaches Programm, das eine Struktur definiert und dann eine Variable dieses Typs erstellt und sie als Argument an eine Funktion übergibt.

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; 
} 

Wenn er in einer x86-Konfiguration ausgeführt wird, in der Testfunktion das Argument x Inspektion, sieht absolut wie ich erwarte. X = 100,0 f, Y = 100,0 f und Z = 0,0 f.

Wenn ich dies jedoch jetzt zu x64 ändere, wenn ich das Argument im Debugger prüfe, bekomme ich Werte X = 4.23084696e-37, Y = 2.648e-43 # DEN, Z = -107374176.

Wenn ich den Test ändere, um einen Zeiger zu nehmen, dann sehen die Werte wieder vernünftig aus.

Warum unterscheiden sie sich nur, wenn sie in x64 erstellt und ausgeführt werden?

Das obige zeigt das Problem, das ich habe. In meinem tatsächlichen Code übergebe ich den Positionsvektor an eine Zeichen-Sprite-Funktion, die eine Transformations-Matrix berechnet, die verwendet wird, um ein Sprite in offenes gl zu zeichnen. Je nachdem, wie ich die Argumente übergebe, scheint jedoch eine andere Transformation zu berechnen. Könnte das Obige dieses Problem verursachen oder wäre es etwas anderes?

+0

Haben Sie Ihre ausführbare Datei optimiert? – JVApen

+2

Es ist normal, wenn Sie versuchen, den optimierten Release-Build Ihrer App zu debuggen. Wenn Sie VS2015 verwenden, dann achten Sie darauf, die Updates zu installieren, es wurde ursprünglich mit vielen Debugger-Bugs veröffentlicht. –

+0

@HansPassant Es scheint ein Fehler in VS. Ich habe ein Upgrade auf Update 3 durchgeführt und das Überwachungsfenster verhält sich nun korrekt. Wenn Sie antworten, werde ich Sie als die akzeptierte Antwort markieren :) – Terry

Antwort

1

Es scheint, dass dies durch einen Fehler in Visual Studio 2015 verursacht wurde. Das Aktualisieren auf Update 3 hat das Problem behoben.

Verwandte Themen