|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 12.02.2005, 21:10 Titel: Run-Time Check Failure #2 |
|
|
Hi!
Hab' folgendes problem mit VC.NET (7.1):
Ich habe ein Programm mit zwei Konfigurationen. Einmal ANSI und einmal UNICODE. Wenn ich UNICODE (Debug) kompiliere, kommt immer der Fehler Run-Time Check Failure #2 - Stack around the variable 'strValue' was corrupted. Der String TCHAR strValue wurde in der Funktion StructBuildFullName lokal deklariert und ein Zeiger auf ihn wird an die Funktion STPAD_VARIANT::operator >> (LPTSTR pOut) const übergeben, die folgendes auf ihn anwendet:
CPP: | StringCchPrintf(pOut, STRSAFE_MAX_CCH, TEXT("%i"), static_cast<long>(*this)) |
Der Fehler tritt erst beim Verlassen der Funktion StructBuildFullName auf.
Hat jemand eine Idee, woran das liegen könnte? Das Programm lässt sich danach normal ausführen. Im Release-Modus kommt kein Fehler.
MfG
KI |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 12.02.2005, 21:48 Titel: |
|
|
Habe gerade folgendes herausgefunden: Die Funktion StringCchPrintfA funktioniert mit STRSAFE_MAX_CCH super. Aber StringCchPrintfW funktioniert nur mit STRSAFE_MAX_CCH - 1 (2147483647 - 1). Ist das ein Fehler der Funktion? Der Puffer strValue hat eine Größe von 32 Zeichen. Da aber static_cast<long>(*this), also ein long (%i), nicht mehr als 11 Zeichen produzieren kann, darf es eigentlich keinen Fehler geben. Die Funktion schlägt nicht fehl. Jedoch tritt der Run-Time Check Failure #2-Fehler auf.
MfG
KI |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 12.02.2005, 23:51 Titel: |
|
|
In der MSDN steht für den zweiten Paramter cchDest der Funktion StringCchPrintf : The maximum number of characters allowed is STRSAFE_MAX_CCH.
Tja. Nur Leider liefert die UNICODE Version im Debug-Modus diesen ominösen Fehler. Wenn man auf weiter klickt, lässt sich das Programm weiter ausführen.
StringCchPrintfW gibt zwar an, dass die Funktion erfolgreich war. Das Ergebis in pOut ist allerdings nur Mist.
(Wie gesagt. Die ANSI Version funktioniert problemlos)
Da der Puffer strValue eine Größe von 32 Zeichen hat, ist STRSAFE_MAX_CCH natürlich nicht erforderlich. Deshalb habe ich eine Konstante gemacht:
CPP: | const STPAD_MAX_VALUE_NAME = 32; |
Mit dieser Konstante gibt es keine Stack corrupted Fehler mehr.
Ihr könnt ja mal in eurer UNICODE Anwendung diese Funktion aufrufen:
CPP: | TCHAR pszTest[32];
StringCchPrintf(pszTest, STRSAFE_MAX_CCH, TEXT("%i"), /*irgendeine Zahl vom Typ long*/ 666);
|
Die Präprozessordefinitionen lauten: WIN32;UNICODE;_DEBUG;_WINDOWS;_UNICODE
An Header-Dateien wird das benötigt:
#include <windows.h>
#include <tchar.h>
#include <strsafe.h> |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|