Schutzverletzung beim erzeugen einer locale classe



  • Fang doch die Exception einfach mal ab (zumindest std::exception in main). Und dann schau Dir die Nachricht der Exception an. Dort wird vermutlich drinstehen "de_DE? Kenn ich nich!". Damit wissen wir schonmal konkret was falsch läuft, statt uns nichtssagende Screenshots anzuschauen 😃

    Und da Du unter Windows unterwegs bist, versuch alternativ mal "German_Germany.1252" oder "de-DE".



  • BerndD schrieb:

    witte_ schrieb:

    Wie kommst Du darauf, dass es ein Namensraum locale gibt?

    Im oben genannten Artikel "Internationalization Using Standard C++" steht das so drin. Warum fragt ihr? Vermutet ihr da das Problem? Ohne Angabe des Namensraum habe ich es zuerst probiert, war exakt das selbe Problem. Der Artikel ist ziemlich alt - September 01, 1997 - was mit den alten VC Compiler ging, müsste doch auch mit den neuen gehen. Bin weiterhin ratlos.

    Darf ich dich darauf hinweisen das der C++ Standardentwurf von 1998 ist (C++98) und davor die Compilerhersteller teilweise ihr eigenes Süppchen gekocht haben (okay, das tun sie noch immer, aber in gewissen Grenzen). Und gerade der VC Compiler hat mit den Versionssprüngen seit VC++6 gewaltig nachbessern müssen.

    Somit läuft ein Programm was unter einem alten VC++ geschrieben wurde nicht zwangsläufig unter einem neuen. Viel schlimmer noch, gibt es Bereiche wo dich der Compiler nicht auf Änderungen hinweisen kann. So etwas ist z.B. die Änderungen des Verhaltens beim Fehlschlag einer Allozierung mittels new (Früher: Rückgabe 0, seit dem Standard: Exception)...

    Sprachen sind im Wandel. Man kann nicht hoffen das einstmals gelerntes immer gültig bleibt. Man ist gut damit beraten sich zumindestens alle 2-3 Jahre mal umzuschauen ob es Änderungen gibt. Der nächste Standardentwurf steht z.B. direkt vor der Tür und es gibt zudem die STL Erweiterung tr1 (Technical Report 1) von glaube 2003. Gut, die Compiler werden nicht von heute auf morgen den neuen Standard übernehmen, aber man sollte im Hinterkopf halten das sich etwas ändert.

    cu André



  • Ich habe nun ein Konsolenprogramm geschrieben:

    #include <string>
    #include <iomanip>
    #include <sstream>
    #include <iostream>
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
      ostringstream s;
      try {
        std::locale loc ("German_Germany.1252");
        s.imbue (loc);
      }
      catch (exception& e) {
        cout << e.what() << endl;
      }
      return 0;
    }
    

    Alle Namen außer "German_Germany.1252" und "C" liefern ein "bad locale name".
    "German_Germany.1252" läuft im Konsolenprogramm durch aber in meiner Anwendung:

    ostringstream s;
      try {
        std::locale loc ("German_Germany.1252");
        s.imbue (loc);
      }
      catch (exception& e) {
        dbgmsg("Fehler: %s\n", e.what());
      }
    

    gibt es eine First-chance exception at 0x00000000 in xxx.exe: 0xc0000005: Accessviolation reading location 0x00000000. Catch wird nicht aufgerufen. Ich weiss nicht wie man das auch noch abfangen kann. Auch wenn ich die Namen ausprobiere, die ein "bad locale name" liefern müssten, passieren die Schutzverletzungen die ich in meinem vorhergehenden Post gezeigt habe. Der Catch-Block wird auch dann nicht aufgerufen.



  • Na, dann drück doch bei der first chance exception einfach mal "Abbruch"... dann kannste dir die Stelle im Debugger anschauen und auch den Callstack verfolgen.



  • Artchi schrieb:

    Na, dann drück doch bei der first chance exception einfach mal "Abbruch"... dann kannste dir die Stelle im Debugger anschauen und auch den Callstack verfolgen.

    Das war ein guter Hinweis! Hatte beim Namen "German_Germany.1252" tatsächlich noch nicht den Aufrufstack überprüft. Die Exception passiert in einer vld.dll (Visual Leak Detector Version 1.9d). Wenn ich den Leak Detector aus den Projekt rausnehme gibt es keine Exception mehr. Schade das ich nun auf den Leak Detector verzichten muss.

    Vielen Dank für Eure Hilfe
    Bernd



  • Does a first chance exception mean there is a problem in my code?

    First chance exception messages most often do not mean there is a problem in the code.

    http://blogs.msdn.com/davidklinems/archive/2005/07/12/438061.aspx



  • Stimmt, kann man abschalten, das der Debugger bei einer first chance exception eine Meldung bringt. Habe ich bei mir auch so konfiguriert.



  • Ich finde die Option weder in Projekt noch unter Tools|Options|Debugging. Ein kleiner Tipp wäre nett.



  • Bei der deutschen Version ist's Debuggen->Ausnahmen.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten