Run-Time Check Failure nach Konvertierung von VS6 auf VS2008
-
Hallo zusammen,
ich habe ein Projekt von VS6 nach VS2008 konvertiert. Mein Projekt lässt sich erstellen, aber sobald ich es ausführe bekomme ich einen Run-Time Ceck Failure.
Fehelermeldung:
Run-Time Check Failure #2 - Stack around the variable 'SubHelp' was corrupted.Hier der Code, bzw der relevante Teil in dem diese Variable verwendet wird:
int MyFunction() { unsigned char Checksum = NULL; unsigned char SubHelp = NULL; char strHelp[3]; sscanf_s(strHelp, "%x", &subHelp); Checksum -= SubHelp; return NULL; }Der Fehler wird ausgelöst sobald die Funktion beendet wird, also an der Stelle der geschweiften Klammer.
Meine Frage also, ist dieses Problem bekannt nach einer Konvertierung von VS6 zu VS2008? Das in VS6 erstellte Projekt löst diesen Fehler nicht aus...
Grüße schnips
-
Herrliches Unternehmen, von 14 Jahre alter Software wird auf 4 Jahre alte Software erneuert

Jedenfalls kann das unter VC6 nicht so laufen, da sscanf_s() dort afaik noch gar nicht existiert hat. Du hast uns also angeschummelt.
MfG SideWinder
-
also das kann so schonmal nicht kompilieren. Du schreibst subHelp mal groß, mal klein.
-
Liefer uns doch mal den echten Code, nicht eine schlechte Kopie. Siehe zweiter Link in meiner Signatur.
-
Richtig, ich musste sscanf in sscanf_s ändern
Und nochmal richtig, ich hab den Beitrag verfasst um euch anzuschummeln oODaddy, entschuldige meine Tippfehler!
@Pumuckel:
int CCsHexline::CreateChecksum() { unsigned char Checksum = NULL; unsigned char SubHelp = NULL; char Datastring[526]; strncpy_s(Datastring, LPCTSTR(m_strOutput),m_strOutput.GetLength()); Datastring[m_strOutput.GetLength()] = '\0'; char strHelp[3]; char* lpLine = Datastring; while(*lpLine != '\0') { strHelp[0] = * lpLine; lpLine++; strHelp[1] = * lpLine; lpLine++; strHelp[2] = '\0'; sscanf_s(strHelp,"%x",&SubHelp); Checksum -= SubHelp; } sprintf_s(m_strCheck,"%2x",Checksum); m_strCheck[2]='\0'; if(Checksum < 16) { m_strCheck[0] = '0'; } return NULL; }
-
Ohne Zeile 1 wuerde ich das jetzt als haesslichen C-Code bezeichnen, aber offenbar soll das ja C++ sein.
-
schnips schrieb:
ich habe ein Projekt von VS6 nach VS2008 konvertiert. Mein Projekt lässt sich erstellen, aber sobald ich es ausführe bekomme ich einen Run-Time Ceck Failure.
Faustregel: Dann war es vorher schon falsch, hat bloß zufällig funktioniert. So auch hier ...
unsigned char SubHelp = NULL; sscanf_s(strHelp, "%x", &subHelp);unsigned char hat 1 Byte, scanf mit %x beschreibt aber ein int, also (bei dir) 4 Bytes. Welche 3 Bytes da noch beschrieben werden, weiß man nicht...
Der Fehler wird ausgelöst sobald die Funktion beendet wird, also an der Stelle der geschweiften Klammer.
Ja, weil VS2008 im Debug-Modus am Funktionsende Code einfügt, der solche Sachen checkt.
Alles unter der Annahme, dass der gepostete Code nicht allzusehr vom wahren Code abweicht :p
schnips schrieb:
Richtig, ich musste sscanf in sscanf_s ändern

Nein, musstest du nicht. Du hast dich dafür entschieden, weil du Angst vor Compilerwarnungen hast, die du nicht verstehst.
-
Danke dafür Bashar!

-
Bashar schrieb:
Faustregel: Dann war es vorher schon falsch, hat bloß zufällig funktioniert. So auch hier ...
unsigned char SubHelp = NULL; sscanf_s(strHelp, "%x", &subHelp);unsigned char hat 1 Byte, scanf mit %x beschreibt aber ein int, also (bei dir) 4 Bytes. Welche 3 Bytes da noch beschrieben werden, weiß man nicht...
Und das ist bei weitem nicht der einzige (potentielle) Fehler.