webForumDet fria alternativet

Unhandled exception

3 svar · 211 visningar · startad av Alpha II

Alpha IIMedlem sedan maj 20002 579 inlägg
#1

Jag har suttit i en evighet och försökt och lösa detta problemet. Jag la till en liten kodsnutt i mitt program och sen så började jag få Unhandled exceptions hela tiden. Jag tog bort den nya koden men det funkade ändå inte... Jag förstår inte alls varför jag får felet.

I Debugen-loggen står det:

HEAP[DuckKiller3.exe]: Heap block at 003C2930 modified at 003C2F5C past requested size of 624
Unhandled exception at 0x77f75a58 in DuckKiller3.exe: User breakpoint.

Vet inte riktigt vad det beror på.. Jag har testat lite och märkt att problemet uppkommer lite slumpmässigt. Men har märkt att denna rad alltid kastar en exception:

CParticle *p = new CParticleSparkle;

Klasserna ser ut såhär

class CParticle
{
public:

	CParticle();
	~CParticle();

	void Reset();
	void Destroy();
	virtual void Render()=0;
	virtual void TakeDamage(float damage);
	void Update();

	virtual void OnDestroy();
	virtual void OnUpdate();

public:

	vec2f		pos;
	vec2f		vel;
	vec2f		gravity;
	float		size;
	float		color[3];
	float		life;
	bool		killable;

	// Pointer to next and prev particle in the linked list
	CParticle	*next; 
	CParticle	*prev; 
};
class CParticleSparkle : public CParticle
{
public:
	virtual void Render();
	int _textureID;
};

Jag tycker att denna kod ser koorekt ut så jag antar att felet kanske ligger någon annastans? Behöver ni se mer kod så säg till :) (Vet inte riktigt vilken annan del av koden som är relevant)

PeWMedlem sedan juni 20006 839 inlägg
#2

Ser ut som att du petar in för mycket data alternativt att nån pekare petar på fel ställe, ihop med dynamiskt allokerat minne. Ett runtime-fel som kan vara svårt att hitta bara genom att kolla på koden. Steppa med debuggern i olika tänkbara "fall".

Alpha IIMedlem sedan maj 20002 579 inlägg
#3

Jag har försökt med debuggern men det har inte gått så bra. Jag är inte helt 100% på den och det är ett spel så det är en loop som går runt kanske 85 ggr i sekunden. Om felet uppstår kanske var 4 sekund så blir det lätt lite tidsödande ;) Jag förstår inte hur man kan allokera för mycket dynamiskt minne..? De där klasserna är ju inte särskilt stora. :l

PeWMedlem sedan juni 20006 839 inlägg
#4

Du har nog inget annat val än att göra så som brukligt.. kör igång debuggern, peta in lite breakpoints och undersök när det smäller.
Problemet är nog inte att du allokerar för mycket minne utan att du vill peta in mer data än vad som får plats eller liknande.

131 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
126 ms — hämta forumlista (db)
129 ms — hämta tråd, inlägg och bilagor (db)