webForumDet fria alternativet

Minnes fel?

9 svar · 441 visningar · startad av Eitraz

EitrazMedlem sedan sep. 2002366 inlägg
#1

Är väll bara aldeles för trött, men kan någon förklara för mig Varför programmet dör vid den fet -och rödmarkerade raden nedan? (Jag får felet "Unhandled exception in eEngine.exe: 0xC0000005: Access Violation." vid debuging)

TextureID Renderer::addTexture(Image *img) {
	Texture texture;

	texture.height	= img->getHeight();
	texture.width	= img->getWidth();
	texture.depth	= 1;
	texture.image	= img;

	[b][red]if (createTexture(texture)) {[/red][/b]
		return insertTexture(texture);
	}

	delete img;
	return NONE;
}

Funktionen createTexure befinner sig i en klass som ärver (eller vad det heter) klassen Renderer och det påverkar INTE felet om jag tömmer createTexture på kod (och endast har kvar return true eller return false)

Texture ser ut på följande sätt:

struct Texture {
	unsigned int texID;
	unsigned int width;
	unsigned int height;
	unsigned int depth;
	Image *image;
};

och klassen Image innehåller bla det här:

protected:
	unsigned char *data;
	short int width;
	short int height;

Är säkert något oerhört enkelt och dumt fel, men jag har då stirrat mig blind på min kod :)

lunaMedlem sedan juli 2004181 inlägg
#2

om funktionen createTexture( ... ) är protected så kan jag tänka mig att något sådant fel kan uppstå.

EitrazMedlem sedan sep. 2002366 inlägg
#3

Nix.. den ligger under public :l

lunaMedlem sedan juli 2004181 inlägg
#4

hmm... skumt.

din texture som du skapar är en lokal instans av Texture, kanske beror på det att, fast iofs borde den inte hugga vid metodanropet... hmmm... jag får tänka lite till...

/R
efter lite tankearbete...
hur ser metoden createTexture ut?

EitrazMedlem sedan sep. 2002366 inlägg
#5

Den ser ut såhär den:

bool OpenGLRenderer::createTexture(Texture &texture) {
	glGenTextures(1, &texture.texID);
	glBindTexture(GL_TEXTURE_2D, texture.texID);

	gluBuild2DMipmaps(GL_TEXTURE_2D, 3, texture.width, texture.height, GL_RGB, GL_UNSIGNED_BYTE, texture.image->getData());

	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

	return true;
}

MEN, om jag tar bort alla knepiga OpenGL grejor där så får jag fortfarande samma fel (på samma ställe) (har då testat att returnera både false och true)

/R
OpenGLRenderer är en sån här klass ;)

class OpenGLRenderer : public Renderer {
lunaMedlem sedan juli 2004181 inlägg
#6

så om jag förstår allt rätt så ärvs klassen Renderer av klassen OpenGLRenderer. klassen Renderer gör sedan ett metodanrop till en metod i klassen OpenGLRenderer... det där tycker jag verkar lite skumt, såvida inte OpenGLRenderer överlagrar funktionen... vilket den troligtvis inte gör.

således borde Renderer ärva klassen OpenGLRenderer för att metodanropet ska fungera.

kanske bör tillägga att min C++ är lite ringrostig, har suttit för mycket med ren C :(

EitrazMedlem sedan sep. 2002366 inlägg
#7

Jag har andra funktioner som fungerar "på samma sätt" i samma klasser och då fungerar det utan problem :/

Felet känns lite småskumt, vet inte riktigt vad man ska göra. Har suttit och testat att lagra infon på lite alla möjliga sätt.

lunaMedlem sedan juli 2004181 inlägg
#8

i dina fungerande metodanrop... använder du lokala instanser av object där också? Fast det borde fungera iaf...

EitrazMedlem sedan sep. 2002366 inlägg
#9

Det gör jag iofs inte.. men.. ja, hmm

EitrazMedlem sedan sep. 2002366 inlägg
#10

Som jag trodde, det var ett "stirra på fel grej" fel.

Försökte ladda den där bilden innan OpenGLRenderer var fullt initierad.. och det gick ju som det gick..

126 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)