Debug Assertion Failed



  • Moin,

    ich habe folgenden Code um Zeichen im Unicode auszugeben:

    int main()
    {
    
    _setmode( _fileno( stdout ), _O_U16TEXT );
    wchar_t ch = 0x2534;
    wchar_t cb = 0x2554;
    wcout << ch;
    wcout << cb;
    
    system("pause");
    return 0;
    }
    

    Wenn ich das so als Programm laufen lasse funktioniert alles.

    Nun wollte ich die Zeichen aber in einem größeren Programm benutzen und habe daher den Code dort rein kopiert. Wenn ich das kompiliere sagt er nichts, nur beim Debugging öffnet sich ein Fenster:

    Debug Assertion Failed

    Program:

    \mein Dateipfad

    File:f:\dd\vctools\crt_bld\self_x86\crt\src\fputc.c
    Line: 48

    Expression: ((_Stream->_flag & _IOSTRG) || (fn=
    _fileno(_Stream),((_textmode_safe(fn)==_IOINFO_TM_ANSI)
    && !_tm_unicode_safe(fn))))

    in fputc.c in Line 48 steht:

    _VALIDATE_STREAM_ANSI_SETRET(str, EINVAL, retval, EOF);

    Wenn ich dann auf 'Weiter' klicke, geht er in dbghook.c in Zeile 66

    void __cdecl _CRT_DEBUGGER_HOOK(int _Reserved)
    {
        /* assign 0 to _debugger_hook_dummy so that the function is not folded in retail */
        (_Reserved);
        _debugger_hook_dummy = 0;
    }
    

    Kann jemand damit etwas anfangen bzw mir beim Beheben des Problems helfen?



  • und wieso funktioniert die Syntaxcoloring der Codeausschnitte nicht?
    Was mache ich falsch?



  • Syntax-Coloring funktioniert vermutlich nicht weil du es abgeschaltet hast ("BBCode in diesem Beitrag deaktivieren").

    Was die Assertion angeht: probier mal wcout statt cout zu verwenden.



  • Hallo,

    das mit dem wcout war schonmal garnicht schlecht.

    Nun fügt er ein paar Zeichen ein, dann kommt wieder Debug Assertion Failed

    Jetzt zeigt er mit in output.c Line 1029 an.

    Expression:((_Stream->_flag & _IOSTRG) || (fn =
    _fileno(_Stream),((_textmode_safe(fn)==_IOINFO_TM_ANSI)
    && !_tm_unicode_safe(fn))))

    Wenn ich auf wiederholen gehe, steht in output.c in Zeile 1029

    _VALIDATE_STREAM_ANSI_RETURN(stream, EINVAL, EOF);

    Hast du da auch noch einen Hinweis, was ich noch machen könnte?



  • Klick auf Wiederholen und guckt dir dann nicht nur an wo er steht, sondern auch die Zeilen darunter im Callstack -- also wie er dahingekommen ist wo er steht.
    Tip: Du kannst Zeilen im Callstack einfach doppelklicken und er springt dann im Editor an die entsprechende Stelle.



  • Hallo,

    vielen Dank für deine Tipps. 🙂

    Ich kann das ganze aus Zeitgründen leider nicht mehr umsetzen, da es sich um eine Projektarbeit handelt und der Abgabetermin näher rückt.

    Habe auf die besagte Tabelle verzichtet.

    Freundliche Grüße

    M.Kreie


Anmelden zum Antworten