Was für die ::Hyper.Experten...Am verzweifeln :-(



  • also wenn mit Call Stack die Aufrufliste gemeint ist, dann markiert mir der Compiler folgendes (in der besagten Aufrufliste):

    std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Tidy(unsigned char 1) line 590 + 19 bytes

    PS: DAnke für Unterstützung! 😉



  • main()
    funktion()
    unterfunktion() <- Hier schauen, wo in deinem Code der Fehler auftritt.
    LIB-funktion1()
    LIB-funktion2()



  • Hi, danke erstmal...
    Wie komme ich denn dahin ?

    PS: Hab MV C++ 6.0



  • Es gibt da links unten (bei mir) ein Fenster mit ner Combobox "Kontext", in der steht der aktuelle Funktionsname, einfach aufklappen und klicken.



  • hm, danke...habs: da steht:

    std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Tidy(unsigned char 1) line 590 + 19 bytes
    std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> >() line 59 + 39 bytes
    CAppData::~CAppData() line 84 + 26 bytes
    $E26() + 34 bytes
    doexit(int 0, int 0, int 0) line 353
    exit(int 0) line 279 + 13 bytes
    mainCRTStartup() line 212
    KERNEL32! 7c816d4f()

    ABer emmm: was heißt das jez ?



  • Das heißt, dass der CAppData Destruktor der Bösewicht ist. Zeig den mal her.



  • Jo kein Problem...nur der ist sehr...simple^^:

    CAppData::~CAppData(void)
    {
    	// --> [none]
    }
    


  • Kannst du mir noch helfen....bitte!! 🙄



  • Wenn du dort nichts eingetragen hast, ist der Destruktor noch lange nicht "leer" 😉 - von dort aus werden noch die D'toren der Class-Elemente aufgerufen. Und offenbar hast du in deiner Arbeit einen der beiden Strings zerschossen.



  • Hi,

    Wie kann man den einen Strng 'zerschießen' ? ...Hab ich das irg wo gemacht (siehe erstes CodePosting) ?

    und Danke für deine Antwort!


  • Mod

    du könntest im destruktor einen breakpoint setzen und dir dort den zustand des objekts anzeigen lassen. das wäre dann unmittelbar vor der absturzstelle. aus dem zustand des objekts kann man dann möglicherweise auf die fehlerursache schließen.



  • this->IPlayback::dspDSetPos.ulBegin = static_cast<unsigned long>(fsCfgFile.tellp());
    

    Bist du sicher, daß so etwas durch den Compiler kommt? Du hast dort ein paar struct's definiert, aber ich sehe nirgends ein Objekt von Typ "IPlayBack". (und selbst wenn diese Zeile durch den Compiler kommt, sieht sie extrem ungesund aus)


  • Mod

    dass der compiler das annimmt, ist allerdings verwunderlich. IPlayback::dspDSetPos ist kein member von CAppData. es stellt sich sowieso die frage, welche mögliche bedeutung das haben sollte.



  • camper schrieb:

    du könntest im destruktor einen breakpoint setzen und dir dort den zustand des objekts anzeigen lassen.

    Hab ich, mit diesem (interessanten) Ergebnis:

    string _strCfgPath = ""; /* oho?, nix? */
    string _strIdxPath = "C:\\idxPos.gfx"; /* ok! */
    

    _______________________________________________________

    CStoll schrieb:

    aber ich sehe nirgends ein Objekt von Typ "IPlayBack"

    Das müsste doch von der Deklaration verdeckt werden oder nicht ?

    _______________________________________________________

    camper schrieb:

    dass der compiler das annimmt, ist allerdings verwunderlich. IPlayback::dspDSetPos ist kein member von CAppData.

    Wieso? IPlayback::dspDSetPos ist doch ein member von CAppData...siehe hier:

    struct IPlayback /* << Wiedergabeoptionen */
            {
                bool         fPaused;        /* Wiedergabe pausiert ?        */
                bool         fInit;            /* Mediendatei geladen ?        */
                bool         fLocalMute;    /* lokale Lautstärke gemutet ?    */
                bool         fGlobalMute;    /* globale Lautstärke gemutet ?    */
                unsigned int uiLocalVol;    /* lokaler Lautstärke Wert        */
                unsigned int uiGlobalVol;    /* globaler Lautstärke Wert        */
                bool         fRepeat;        /* Wiederholen (Repeat-Mode) ?    */
                ERepeatModes rpRepMode;        /* Wiederholungsmodus (ENUM)    */
                /* -------
                Sicherung: fLocalMute, uiLocalVol, fRepeat, rpRepMode
                ----------*/
                bool        fSaved;            /* bereits in Datei gespeichert    */
                SDataSetPos    dspDSetPos;        /* VOILA! ;)    */
            };
    

    Danke nochmal/schonmal 😉 für eure Hilfe, echt nett 👍



  • Expertensucher schrieb:

    Wieso? IPlayback::dspDSetPos ist doch ein member von CAppData...siehe hier:

    Nein, dspDSetPos ist ein Member von IPlayback, und IPlayback ist garkein Objekt sondern ein Typ. Dieser Typ existiert im Scope der Klasse CAppData (Du könntest mit CAppData::IPlayback myPlayback; ein Objekt davon erzeugen). Einen Member vom Typ IPlayback gibt es jedoch garnicht.



  • Hi,
    Könntest du mir das:

    LordJaxom schrieb:

    (Du könntest mit CAppData::IPlayback myPlayback; ein Objekt davon erzeugen)

    mal daran:

    class CAppData
    {
        /* -----------------------------------------------------------------------------*/
        private: /* -Declarations                                                       */
        /* -----------------------------------------------------------------------------*/
            struct IPlayback /* << Wiedergabeoptionen */
            {
                bool         fPaused;        /* Wiedergabe pausiert ?        */
                bool         fInit;            /* Mediendatei geladen ?        */
                bool         fLocalMute;    /* lokale Lautstärke gemutet ?    */
                bool         fGlobalMute;    /* globale Lautstärke gemutet ?    */
                unsigned int uiLocalVol;    /* lokaler Lautstärke Wert        */
                unsigned int uiGlobalVol;    /* globaler Lautstärke Wert        */
                bool         fRepeat;        /* Wiederholen (Repeat-Mode) ?    */
                ERepeatModes rpRepMode;        /* Wiederholungsmodus (ENUM)    */
                /* -------
                Sicherung: fLocalMute, uiLocalVol, fRepeat, rpRepMode
                ----------*/
                bool        fSaved;            /* bereits in Datei gespeichert    */
                SDataSetPos    dspDSetPos;        /* Position dieses Datensatzes    */
            };
    
            struct IOptions /* << Programmoptionen */
            {
                struct IStartup /* << Programmstart-Einstellungen */
                {
                    bool        fAutoStart;    /* beim Systemstart laden ?                */
                    bool        fStartMin;    /* Programm miniert starten ?            */
                    string        strKeyName;    /* Name des Registry-Eintrags            */
                    string        strKeyPath;    /* Registry-Wert (Pfad) von strKeyName    */
                    /* -------
                    Sicherung: Alle
                    ----------*/
                    bool        fSaved;        /* bereits in Datei gespeichert            */
                    SDataSetPos    dspDSetPos;    /* Position dieses Datensatzes            */
                };
                // [> TODO: Weitere Optionen implementieren
            };
    
            struct IInterface /* << Fenstereinstellungen */
            {
                bool fPrstPaused;    /* Trackinformationscontrol pausiert ?    */
                bool fTopmostWnd;    /* Hauptfenster immer im Vordergrund ?    */
                /* -------
                Sicherung: Alle
                ----------*/
                bool        fSaved;        /* bereits in Datei gespeichert    */
                SDataSetPos    dspDSetPos;    /* Position dieses Datensatzes    */
            };
    
            string    _strCfgPath;        /* Dateipfad zur Konfigurationsdatei    */
            string    _strIdxPath;        /* Dateipfad zur Indexdatei                */
            bool    _fDataSetsSaved;    /* Alle Datensätze gespeichert ?        */
            bool    _fCfgFileCreated;    /* Konfigurationsdatei bereits erstellt    */
            bool    _fIdxFileCreated;    /* Indexdatei bereits erstellt            */
    
            // [> TODO: Weiteres...
        /* -----------------------------------------------------------------------------*/
        public: /* -Declarations                                                        */
        /* -----------------------------------------------------------------------------*/
    

    zeigen ?, bitte *schöne-Augen-mach* ^^

    Weiß nämlich nicht genau wie ich das deklarieren soll 😕


  • Mod

    ein objekt definierst du so:

    T name;
    

    wobei T irgendein typ ist und name evtl. noch mit deklaratoren ([] * () &) dekoriert wird (das ergebnis muss ein vollständiger typ sein). es ist dabei möglich, den typ erst in der variablendefinition zu definieren, also z.B.:

    struct T { /* ... */ } name;
    

    tatsächlich ist die übliche form der klassendefinition nichts weiter als eine variablendefinition, die keine variable definiert:

    struct T { /* ... */ };
    

    umkehrt kannst du z.B. in diesem fall auch darauf verzichten, der klasse einen namen zu geben (vorausgesetzt, du brauchst ihn nicht noch einmal):

    struct { /* ... */ } name;
    

    hier ist der typ selbst unbenannt.

    jetzt sollte auch klar sein, warum man die klassendefinition immer mit semikolon abschließen muss, während das bei funktionsdefinitionen unnötig ist.

    schau auch mal hier rein:http://www.c-plusplus.net/forum/viewtopic-var-t-is-150636.html



  • Hi nochmal....hab mal ne Frage am Rande:...Geht das denn ? (wg Speicherreservierung):

    fsCfgFile.write(strFTBeginCfgFile.c_str(), strFTBeginCfgFile.length());
    

    ? thx schomah^^



  • Das sollte gehen. Ich hoffe, du speicherst auch die Länge des Strings mit ab, sonst wird das mit dem Einlesen schwierig.



  • oh, jo stimmt...muss ich noch :p


Anmelden zum Antworten