2009-06-01 15 views
1

Ich bin Teil eines großen Projekts in Visual Studio 2005 debuggen und den Code Zeile für Zeile durchlaufen.Zuweisungen fehlgeschlagen

int speed = this->values.speed; 
int ref = this->values.ref_speed; 

vorbei an der ersten Zeile Nach Schritt, values.speed einen Wert von 61 hat, aber aus irgendeinem Grund zugewiesen wird immer Geschwindigkeit den Wert 58. Nach der zweiten Zeile values.ref_speed einen Wert von 58 hat, ref wird jedoch mit dem Wert 30 versehen.

Wenn Sie pausieren, können Sie sehen, dass die ursprünglichen Werte tatsächlich 61 bzw. 58 sind, aber die gespeicherten Werte sind unterschiedlich.

Was verursacht dieses Verhalten?

+2

Ist es eine Multi-Thread-Anwendung? – Robert

+0

Wie wäre es mit einem Code für Werte? – JeffH

+0

Ja. Dieser bestimmte Ort wird jedoch nur einmal beschrieben. –

Antwort

6

Dies könnte passieren, wenn die Definition der Werte Struktur in einer Headerdatei geändert wurde und nicht alle Objektdateien neu kompiliert wurden. Dann stimmt die "Karte" der Struktur, die Ihr Code in dieser Datei verwendet, möglicherweise nicht mit dem Rest des Codes überein. Das könnte erklären, warum eine der Variablen den Wert des anderen hat.

Oder die Visual Studio-PDB-Datei wurde aus irgendeinem Grund nicht aktualisiert, und Visual Studio sucht an der alten Stelle für die Variable.

+0

Ich würde prüfen, ob Ihre Debugging-Informationen korrekt mit Ihrem Projekt synchronisiert sind. Ich hatte Probleme zuvor, wo Werte wegen älterer Versionen von Debugging-Informationen, die geladen wurden, nicht auftraten. –

+0

Oder wenn die Struktur als zwei verschiedene Dinge an zwei verschiedenen Orten definiert wurde. Ich habe keine Ahnung, wie es gelungen ist zu kompilieren, aber die Struktur wurde zweimal an zwei Stellen definiert - wobei die Reihenfolge der Variablen getauscht wurde. Danke! –

0

Machst du das im Debug- oder Release-Modus? Wenn Sie es im Veröffentlichungsmodus oder mit optimierter Optimierung ausführen, hat der Compiler möglicherweise die Reihenfolge für eine höhere Leistung geändert, was zu merkwürdig aussehenden Ergebnissen führen kann. Dies bedeutet nicht, dass bei der tatsächlichen Ausführung etwas falsch ist, aber es kann verwirrend sein, durchzugehen.

+0

Dies geschieht im Debug-Modus. –

1

Verrückt. Jede Chance, dass Sie eine lokale Variable vom gleichen Typ wie diese haben -> Werte, deren Name auch Werte sind (was würde erklären, warum Sie über dieses-> auf ein Mitglied verweisen)?

+0

Keine lokalen Variablen. Ich habe dies verwendet, um zu verdeutlichen, dass es sich bei einer sehr langen show() -Routine um keine lokale Variable handelt. –

Verwandte Themen