2013-11-15, 18:48
  #1
Medlem
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:
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.
Citera
2013-11-15, 19:36
  #2
Medlem
Citat:
Ursprungligen postat av Boryan65
Kod:
Access violation reading location 0xFEEEFF26.

Det vore kul att veta vad en s hg adress som 0xFEEEFF26 r: ROM, I/O-port, Grafikminne?

Och om det r en korrekt adress, eller en felaktigt skapad / sopor.
__________________
Senast redigerad av alef-noll 2013-11-15 kl. 19:39.
Citera
2013-11-15, 19:43
  #3
Medlem
Citat:
Ursprungligen postat av alef-noll
Det vore kul att veta vad en s hg adress som 0xFEEEFF26 r: ROM, I/O-port, Grafikminne?

Och om det r en korrekt adress, eller en felaktigt skapad / sopor.
Debuggern kan inte avgra vad det fr address.
Citera
2013-11-16, 01:37
  #4
Medlem
Haha... wow.

Hade frlitat mig p function scope i main.

Gick lite bttre nr jag dynamiskt allokerade spelet...

Tack fr hjlpen!
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in