SDL2 IMG_LoadTexture tötet meinen Arbeitspeicher



  • Hallo, als programmiert Anfänger wollte ich mich mit SDL2 anlegen und habe jetzt meinen Spaß. Das "Spiel" funktioniert vielleicht 2 Minuten, danach will es keine neue Bilder mehr laden und muss beendet werden. Dabei kann ich beobachten,wie die Anzeige meines Arbeitsspeichers exponentiell nach oben schießt. Ich kann mir auch nicht mehr weiter helfen und brauche dringend jemand der mir wenigstens einen Tipp gibt.

    Beispiel anhand man.gif

    Main.h

    CSprite* man;
    

    Sprite loader

    renderer = old_renderer;
    
    image = NULL;
    image = IMG_LoadTexture(renderer, FilePath.c_str());
    
    	if (image == NULL )
    	{
    		std::cout << "Error beim laden von Bild!";
    	}
    
    rect.x = x;
    rect.y = y;
    rect.w = w;
    rect.h = h;
    

    Konstruktor Main

    CMain::CMain(int passed_ScreenWidth, int passed_ScreenHeight)
    {
    man = new CSprite(csdl_setup->GetRenderer(), "image/man.gif", 400, 4, 193, 54);
    }
    

    In der Hauptschleife wird mit dem Befehl Draw gerendert.

    void CSprite::Draw()
    {
    	SDL_RenderCopy(renderer, image, NULL, &rect);
    }
    


  • Wahrscheinlich lädst Du irgendwo wiederholt Kram in den Speicher, ohne den je wieder freizugeben.
    Wie häufig durchläufst Du denn den gezeigten Code vom "Sprite loader"? Und gibst Du die Texturen wieder frei? ( SDL_DestroyTexture() )



  • Du solltest dann einfach nicht eine exponential steigende Anzahl Bilder laden. Benutz doch mal einen Debugger und schau dir an, wann genau welche Bilder geladen werden.


Log in to reply