Tjenare!
Jag har ett ganska delikat problem som jag suttit och petat med i ett bra tag nu, och nu knner jag verkligen att jag skulle behva ett extra par hjrnor fr att f bukt p skiten.
Hller p att skriva ett spel i SDL, har inte kommit s mycket lngre n att jag gjort startmenyn.
Igr s tankade jag hem och infogade SDL_TTF fr att f in textrendering, och nu nr jag avslutar spelet s kraschar det.
Jag r inte tillten att lsa ngot minnes frn mitt GameContext-objekt(GameMenu). Om det r ngon som lyckas hitta felet och det r ngot uppenbart som jag borde ha sett s knn er vlkomna att idiotfrklara mig
.
Felet i koden:
Som i sin tur leder till:
Problemet frsvinner om jag tar bort klassen jag skrev fr texthanteringen, som ser ut:
Text.h
Text.cpp
Text-objektet initeras p fljande stt i GameMenu.cpp:
Callstacken:
Felmeddelandet i sin helhet:
Jag har ett ganska delikat problem som jag suttit och petat med i ett bra tag nu, och nu knner jag verkligen att jag skulle behva ett extra par hjrnor fr att f bukt p skiten.
Hller p att skriva ett spel i SDL, har inte kommit s mycket lngre n att jag gjort startmenyn.
Igr s tankade jag hem och infogade SDL_TTF fr att f in textrendering, och nu nr jag avslutar spelet s kraschar det.
Jag r inte tillten att lsa ngot minnes frn mitt GameContext-objekt(GameMenu). Om det r ngon som lyckas hitta felet och det r ngot uppenbart som jag borde ha sett s knn er vlkomna att idiotfrklara mig

Felet i koden:
Kod:
GameImp::~GameImp() { delete mGameContext; // <---- denna delen SDL_FreeSurface(mSurface); SDL_DestroyWindow(mWindow); }
Som i sin tur leder till:
Kod:
GameMenu::~GameMenu() { Mix_FreeMusic(mMusic); SDL_FreeSurface(mBackground); }
Problemet frsvinner om jag tar bort klassen jag skrev fr texthanteringen, som ser ut:
Text.h
Kod:
#ifndef INCLUDED_TEXT #define INCLUDED_TEXT #include "SDL_ttf.h" #include "Vector2D.h" #include "SDL_surface.h" class Text { public: Text(const char *file, char *text, Vector2D vector, int size=14, int r=255, int g=255, int b=255); ~Text(); void draw(SDL_Surface *src_surface) const; private: SDL_Surface *mSurface; TTF_Font *mFont; SDL_Color mColor; Vector2D mVector; char *mText; }; #endif
Text.cpp
Kod:
#include "Text.h" #include "GameSurface.h" #include "SDL_ttf.h" #include "Vector2D.h" #include "SDL_surface.h" Text::Text(const char *file, char *text, Vector2D vector, int size, int r, int g, int b) : mFont(TTF_OpenFont(file, size)), mVector(vector), mText(text) { mColor.r = r; mColor.g = g; mColor.b = b; mSurface = TTF_RenderText_Solid(mFont, mText, mColor); } Text::~Text() { SDL_FreeSurface(mSurface); TTF_CloseFont(mFont); } void Text::draw(SDL_Surface *src_surface) const { GameSurface::draw(mSurface, src_surface, mVector); }
Text-objektet initeras p fljande stt i GameMenu.cpp:
Kod:
GameMenu::GameMenu() : mBackground(GameSurface::onLoad(FILE_PATH)), mMusic(Mix_LoadMUS(MUSIC_PATH)), mText(FONT_PATH, "Test", Vector2D(300, 300), 34), mCamera() { } // Used for clone() (to be changed) GameMenu::GameMenu(const GameMenu &menuImp) : mBackground(GameSurface::onLoad(FILE_PATH)), mMusic(Mix_LoadMUS(MUSIC_PATH)), mText(FONT_PATH, "Test", Vector2D(300, 300), 34), mCamera() { }
Callstacken:
Kod:
libfreetype-6.dll!6cd08ddb() Unknown [Frames below may be incorrect and/or missing, no symbols loaded for libfreetype-6.dll] > SDL_Game.exe!GameImp::~GameImp() Line 21 C++ SDL_Game.exe!GameImp::`scalar deleting destructor'(unsigned int) C++ SDL_Game.exe!Game::~Game() Line 20 C++ SDL_Game.exe!SDL_main(int argc, char * * argv) Line 18 C++ SDL_Game.exe!main(int argc, char * * argv) Line 140 C SDL_Game.exe!__tmainCRTStartup() Line 536 C kernel32.dll!7638336a() Unknown ntdll.dll!77b29f72() Unknown ntdll.dll!77b29f45() Unknown
Felmeddelandet i sin helhet:
Kod:
Unhandled exception at 0x6CD08DDB (libfreetype-6.dll) in SDL_Game.exe: 0xC0000005: Access violation reading location 0xFEEEFF26.