2017-03-12 3 views
0

Wie jeder normale C++ Programmierer, wenn ich diesen Code eingeben ...Integer hat nicht den erwarteten Wert in Debugger

for (int m = 0; m < 3; m++){ 
    for (int n = 0; n < 3; n++){ 
     if (A[m].substr(size,location) == B[n].substr(size,location)){ 
      return false; 
     } 
    } 
} 

ich der erste Wert von m erwarten 0 in meiner Iteration zu sein. (Weil ich es buchstäblich als einen Wert von 0 deklariert hatte). Allerdings war mein Programm ein bisschen funky, also entschied ich mich, es im Debugger zu betrachten. Interessanterweise entschied C++ statt eines Anfangswerts von 0, dass m einen Anfangswert von 32767 haben sollte.

Kann mir jemand erklären, warum und wie dies möglicherweise passieren könnte?

+0

Sieht aus wie eine Art von Integer Over/Underflow-Fehler. Sie könnten versuchen, 'm' aus der Schleife auszudrucken. –

+8

Je nachdem, wo der Debugger pausiert hat, hat er möglicherweise an einer Stelle pausiert, an der 'm' * deklariert *, aber noch nicht * initialisiert wurde. Führen Sie einen Schritt im Debugger aus. Erhält es dann den Wert 0? – templatetypedef

+0

Kompilieren Sie mit optimierter Optimierung? – kennytm

Antwort

1

Ah, TemplateTypedef war richtig. Sobald ich zum nächsten Haltepunkt gegangen bin, wurde der Wert initialisiert. Danke Leute!

Verwandte Themen