JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=6966eec85c1120db71278b3a24fcc784Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Run-Time Check Failure #2

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
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

BeitragVerfasst am: 12.02.2005, 21:10    Titel: Run-Time Check Failure #2 Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 12.02.2005, 21:48    Titel: Antworten mit Zitat

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. Crying or Very sad

MfG
KI
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 12.02.2005, 23:51    Titel: Antworten mit Zitat

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. thinking

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum