Eine Verständnisfrage...



  • Die Frage gleich am Anfang, die Erklärung dazu später:
    Warum geht

    Player myPlayer(background, 3,6);
    SDL_Delay(1);
    AnimationManager::GetInstance().AddAnimation(player,2);
    

    aber nicht

    Player myPlayer(background, 3,6);
    AnimationManager::GetInstance().AddAnimation(player,2);
    

    Wenn ich mein Programm im releasemodus kompiliere? (im debugmodus geht beides)
    In release bekomm ich ohne das SDL_Delay access violation.
    So zur erklärung des codes (das ganze projekt ist atm 62 kb groß, alles hier posten wär also glaub irrsinn 😉 ):

    AnimationManager::GetInstance().AddAnimation(player,2);
    AnimationManager ist ein Singleton, die Zeile holt einen Zeiger auf das Objekt, und übergibt ein Objekt des Typs "AnimatedObject",welches dann per push_back in einen vector gespeichert wird.

    Player myPlayer(background, 3,6);
    Hier wird intern wieder der AnimationManager (da es ein singleton ist der "selbe") aufgerufen, und per AddAnimation wieder ein weiteres AnimatedObject per push_back in den vector geschoben.
    Die Zahlen sind positionierungsangaben.
    Die gespeicherten Daten gehen scheinbar irgendwie verloren, bzw ohne SDL_Delay wird es nicht richtig gespeichert.

    Also:

    Player myPlayer(background, 3,6); //AnimationManagerVector.push_back(temp);
    AnimationManager::GetInstance().AddAnimation(player,2); //AnimationManagerVector.push_back(player);
    

    Mir graust es nämlich im stark fortgeschrittenem Zustand, wieder solche Fehler zu haben (für die "Lösung" hab ich 2std gebraucht, und wir sind noch recht am Anfang), die im release modus natürlich nur schwer zu finden sind... wie entsteht sowas, wie verhinder ich sowas? Was haben wir falsch gemacht?

    [edit]
    Nachtrag: Unser Programm ist singlethreaded, hab das vergessen zu erwähnen.
    [edit2]
    Nachdem wir den eigentlichen Fehler (der copykonstruktor von Animated Object hat eine variable nicht mitkopiert) gefunden haben hat das ganze stark an priorität verloren, aber warum es mit dem SDL_Delay plötzlich geht würd mich immer noch interessieren, weiß da einer ne antwort? 🙂



  • Weil sdl schlecht ist, nimm lieber:

    http://www.sfml-dev.org/



  • Es ist ziemlich sicher reiner Zufall, dass der Fehler mit SDL_Delay() nicht auftrat.

    Popoklopfer schrieb:

    Weil sdl schlecht ist, nimm lieber:

    http://www.sfml-dev.org/

    erstens wurde danach nicht gefragt und zweitens ist SDL eine sehr gute Library, also start hier bitte keine flames.



  • Ich hatte mal ein ähnliches Programm mit einer Gtkmm-Anwendung.
    Am Ende lag es an einer nicht initialisierten bool-Variable 🙄

    Das Problem trat nur im Release-Modus auf, und da auch nur, wenn ich irgendwelche Optimierungen im GCC angeschaltet hatte.



  • Hehe, danke für eure antworten.


Anmelden zum Antworten