Ich habe einige wirklich seltsame Verhalten mit meinem Code.Debugging-Probleme mit Visual Studio 2010 C++ - Ungerade Werte angezeigt
Es ist eine Zugriffsverletzung Fehler zu werfen, wenn ich es laufen und durch den Debugger kann ich die Linie, um herauszufinden, welche es verursacht:
for(int x=0; x<width; x++) {
int current = edgeKernelXY(left+x,top+y,true,0);
....
}
ich einen Debug-Punkt in dem Verfahren edgeKernelXY gelegt und der Code ist nie in die Methode gekommen.
Das nächste, was ich überprüfte, war, was die Werte sind, die ich hinein gebe. Links, oben und y scheinen normal genug zu sein. Nach dem Debugger, x = 19840810 und current = 19840810. Ich verstehe nicht, wie das passiert sein könnte, besonders wenn ich am Anfang der Schleife x zu 0 erklärt. Breite ist korrekt bei 40.
x und current wurden nirgendwo anders im Umfang der Forloop deklariert. Was könnte hier schiefgehen?
EDIT:
ich den Code wie folgt verändert:
for(int x=0; x<width; x++) {
int current = edgeKernelXY(left,top+y,true,0);
if(current > THRESHOLD &&
edgeKernelXY(left+x,top+y,true,1) > THRESHOLD &&
edgeKernelXY(left+x,top+y,true,2) > THRESHOLD) {
} else {
current = 0.0f;
}
Insbesondere änderte ich links + x auf dem ersten Aufruf von edgeKernelXY nur links. Dies scheint zu laufen und der zweite Aufruf von edgeKernelXY zeigt x korrekt auf 0 gesetzt. Allerdings ist das Verhalten nicht das was ich will. Links + x bringt mir immer noch verrückte Werte für x, die eine Zugriffsverletzung verursachen.
for(int x=0; x<width; x++) {
int current;
current = 0;
current = edgeKernelXY(left+x,top+y,true,0);
Zeigt auch Probleme mit Strom.
Es ist keine Überraschung, dass "aktuell" falsch ist, da es zu diesem Zeitpunkt noch nicht zugewiesen wurde. Meine einzige Vermutung für "x" ist, dass ein Teil des Codes, den Sie herausgeschnitten oder sonst nicht angezeigt haben, UB ist, da dies für mich gut aussieht. –
Überprüfen Sie oben, der Code wird kopiert und direkt ohne Zeilen dazwischen eingefügt. – Jkh2
Debuggen Sie einen Release-Build? Das könnte dazu führen, dass der Debugger sehr seltsame Werte für Locals zeigt und niemals einen Breakpoint trifft, der auf 'edgeKernelXY()' gesetzt ist. Was wird ausgegeben, wenn Sie ein 'printf ("% d \ n ", x)' (oder ein ähnliches 'OutputDebugString()') eingeben? Ich wette, es zeigt den richtigen Wert für 'x', auch wenn der Debugger nicht. –