SDL Quit



  • Zu lächerlich? Wie kommst du darauf? Es ist halt schwierig, einfach so ins Blaue zu raten. Ich kann dir leider auch nicht genau sagen, wo der Fehler liegt. Hast du auch alles richtig gelinkt (z.B. dynamische Version bei DLLs)?

    Was ich dir empfehle, ist das Programm immer mehr zu vereinfachen. Also mal schauen, ob die Zugriffsverletzung auch auftritt, wenn du wichtige Teile deines Codes weglässt. Und auch mal nur SDL initialisieren und wieder beenden. So kannst du den Fehler eingrenzen.

    Wenn das nichts hilft: Sind die SDL-Dateien alle korrekt? Es gibt es ja manchmal, dass man irgendwo eine fehlerhafte Datei hat. Zum Beispiel, weil man sie aus anderer Quelle bekommen hat. Lade in diesem Fall vielleicht nochmals das SDL-Package herunter.



  • Genau. Lass alles unwichtige weg. Mach ein Minimalbeispiel draus, das nur noch deinen Fehler erzeugt. Dann poste das und wir werden versuchen den Fehler zu finden. 🙂



  • myraezel schrieb:

    kann ich davon ausgehen das bisher niemand weiterhelfen konnte, oder ist das problem zu lächerlicher natur?

    19 Stunden liegen für das Spiele-/Grafikprogrammierung-Forum noch innerhalb der üblichen Reaktionszeit, also abwarten 🙂

    Hast du SDL selbst kompiliert oder Binaries aus einer anderen Quelle verwendet?



  • danke für die antworten,

    nein ich habe sdl nicht selber kompiliert, da mir das mit meinem borland builder 4 ned gelang (kann durchaus an mir liegen^^). Ich sitze gerade ned an meinem eigenen rechner , aber wenn ich mich nicht irre tritt das Problem des unsauberen beendens erst dann auf, wenn Timer initialisiert worden sind. Diese werden aber bei mir vor dem beenden wieder gestoppt. Ich poste nachher mal den minimal Code der den fehler auslöst.



  • so, es hat eine weile gedauert, aber das ist der minimal code, der genügt um den Fehler zu verursachen.

    #include <vcl.h>
    #pragma hdrstop

    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    #include <sdl.h>
    TForm1 *Form1;
    void init ();
    SDL_Surface *screen;
    SDL_TimerID curstimer;
    SDL_Event event;
    Uint32 cursor (Uint32 interval, void param);
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent
    Owner)
    : TForm(Owner)
    {
    init ();
    }
    //---------------------------------------------------------------------------

    void init ()
    {
    SDL_Init(SDL_INIT_TIMER);
    SDL_Init(SDL_INIT_VIDEO);
    screen = SDL_SetVideoMode(640, 480, 0, NULL);
    curstimer = SDL_AddTimer(10, cursor, NULL);
    }
    //---------------------------------------------------------------------------
    Uint32 cursor (Uint32 interval, void *param)
    {
    while(SDL_PollEvent(&event))
    {
    switch(event.type)
    {
    case SDL_KEYDOWN:
    switch(event.key.keysym.sym)
    {
    case VK_ESCAPE: SDL_Quit(); exit(0); break; //wenn escape gerdrückt wird, beende
    }
    }
    }
    return interval;
    }
    //---------------------------------------------------------------------------

    Bei diesem Beispiel wird durch einen Eintrag (Application->ShowMainForm = false) in der Project.cpp die Form nicht angezeigt, sondern nur das was SDL zeigt. (Also ein schwarzes Fenster).
    Wenn ich diesen Eintrag entferne, und auf der dann sichtbaren Form einen Button plaziere, der wenn er geklickt wird exit(0) ausführt, wird das Programm ordentlich beendet.

    So das war jetzt alles an Infos die bei meinen Versuchen herumkamen. Ich hoffe es genügt damit ihr mir weiterhelfen könnt



  • Du schreibst:

    SDL_Init(SDL_INIT_TIMER);
    SDL_Init(SDL_INIT_VIDEO);
    

    In der Doku steht, dass man die Flags mit or verknüpfen soll.
    Evtl liegt es daran. ( Ich bezweilfe es zwar stark, aber dauert ja nur paar Sekunden um es zu testen. )

    Versuch mal:

    SDL_Init(SDL_INIT_TIMER | SDL_INIT_VIDEO );
    


  • Versuch es mal mit einem ganz normalen SDL Programm. Wahrscheinlich macht die VCL Probleme.



  • danke für eure Antworten. Das mit dem or Verknüpften initialisieren werde ich testen sobald ich wieder daheim bin. Was der Poster direkt vor mir empfahl kann ich nicht ganz nachvollziehen. Ein ganz normales SDL Prog erstellen ohne vcl, mir ist da nicht ganz klar worauf ich da verzichten soll. Ich arbeite mit dem Borland ´C++ Builder 6.0.

    Oder meinst du das ich ein Konsolen Projekt machen soll, aber wenn ich mich nicht irre ist das auch mit vcl.



  • Konsolenprojekt sollte ohne VCL sein, aber ganz sicher bin ich mir nicht. Probiers mal einfach aus...

    Achja, Tip für die nächsten Posts:
    Setze deinen Code in C++-Tags. Damit werden die automatisch eingerückt und eingefärbt, um die Lesbarkeit zu erhöhen. Zu finden ganz links unter der Smilieleiste.



  • kk, beides wird gemacht^^


Anmelden zum Antworten