SDL Konsole + Exception



  • hallo zusammen,

    ich hab zwei fragen zu sdl

    1. unter windwos wird doch eine konsole mitgestartet. ich möchte in diese konsole was reinschreiben (loggen), mit printf schreibt er es allerdings
    in stdout.txt (steht auch irgendwo in der sdl-hilfe) kann ich das irgendwie
    ändern oder ist das überhaupt möglich ?

    2. ich muss zugeben von exception habe ich nicht so viel ahnung, aber sie
    sind einfachen handzuhaben. jetzt möchte ich aber alle exception an mich
    nehmen, zb: wenn ein pointer prob auftritt übernimmt sdl die fehlerbehandlung
    und logt den fehler in stderr.txt. kann ich irgendwie die macht an mich reisen ?
    exception klasse siehe http://www.zfx.info/Tutorials.php?ID=82

    un so sieht es bei mir aus

    int main(int argc, char *argv[])
    {
    // --- schnipp
        try
        {
            new CEngine();
            CEngine::Get().Init(argc, argv);
        }
    
        catch(CException &Exception)
        {
            // fehler loggen
            Exception.WriteToLog();
    
            return -1;
        }
    // ---- schnapp
    


  • miller_m schrieb:

    wenn ein pointer prob auftritt übernimmt sdl die fehlerbehandlung

    Was wäre denn so ein Pointer-Problem? Speicherzugriffsfehler behandelt man für gewöhnlich nicht mit exceptions..

    new CEngine();
    CEngine::Get().Init(argc, argv);

    Und was hast du dir dabei gedacht?



  • DrGreenthumb schrieb:

    Speicherzugriffsfehler behandelt man für gewöhnlich nicht mit exceptions..

    mit was dann ?

    DrGreenthumb schrieb:

    miller_m schrieb:

    new CEngine();
    CEngine::Get().Init(argc, argv);

    Und was hast du dir dabei gedacht?

    was soll ich mir dabei gedacht haben ? was willst denn wissen ?



  • Speicherzugriffsfehler lassen das Programm abstürzen und das BS gibt eine entsprechende Meldung. Da gibts nichts wo man als Programmierer reagieren will, weils eh schon zu spät ist.

    Was hast du dir bei

    new CEngine();
    

    gedacht? Du erstellst ein Objekt aber behältst keinen Zeiger darauf.
    1.) Unsinn
    2.) Speicher der nie wieder freigegeben wird.



  • CEngine erbt von einer Singleton Klasse in den der Zeiger verwaltet wird
    und freigeben wird das ganze mit

    delete CEngine::GetPtr();
    

    😉

    DrGreenthumb schrieb:

    Speicherzugriffsfehler lassen das Programm abstürzen und das BS gibt eine entsprechende Meldung. Da gibts nichts wo man als Programmierer reagieren will, weils eh schon zu spät ist.

    ok ich danke dir



  • Und in dem Konstruktor von CEngine setzt du denn CEngine::instance auf this? Nee, das ist nicht gut.. Schau dir nochmal an wie so ein Singleton aussieht..


Anmelden zum Antworten