Skip to main content
GameDev.net gamedev.net
🔒 Locked 🎮 Unity

Unhandled Exception

Started by sarim Jan 27, 2012 at 8:59 PM 17 replies 2.3k views
Original Post
sarim
sarim
[color=#000000][font=Verdana, Arial, Helvetica, sans-serif]

I dont know what im doing wrong but for some reason I keep getting an unhandled exception my my entity manager. I try to draw the sprite to the screen and right before the entity manager updates and trys to draw it everything is fine. But as soon as it attempts to draw the sprite i get an exception. Here's the code. Can someone please help me ? This is driving me nuts icon_sad.gif if you need the whole project just let me know and ill email it to you

//Game.cpp [/font]

[color=#000000][size=2]Code:
#include "EntityManager.h"

void System::Init()
{
engine = new System();

engine -> SetWindow(800, 600, "Test");

Entity player;
player.Load("test.png", 100, 100);

manager.Add(player);
}

void System::Run()
{
sf::Event ev;

while (engine -> window -> IsOpened())
{
engine -> window -> PollEvent(ev);


engine -> window -> Clear();
manager.Update();
engine -> window -> Display();
}
}


[color=#000000][font=Verdana, Arial, Helvetica, sans-serif]

//System.cpp [/font]

[color=#000000][size=2]Code:
#include "System.h"

void System::SetScreenDim(int width, int height)
{
this -> SCREENW = width;
this -> SCREENH = height;
}

void System::SetTitle(std::string title)
{
this -> Title = title;
}

void System::SetWindow(int width, int height, std::string title)
{
this -> SCREENW = width;
this -> SCREENH = height;
this -> window = new sf::RenderWindow(sf::VideoMode(width, height), title.c_str());
}


[color=#000000][font=Verdana, Arial, Helvetica, sans-serif]

//EntityManager.cpp [/font]

[color=#000000][size=2]Code:
#include "EntityManager.h"
#include "System.h"

void Manager::Update()
{
Entity entity;

std::list::iterator iter = eList.begin();

while (iter != eList.end())
{
entity = *iter;

entity.GetSprite().SetPosition(entity.GetX(), entity.GetY());

engine -> window -> Draw(entity.GetSprite());

iter++;
}
}

void Manager::Add(Entity entity)
{
eList.push_back(entity);
}


[color=#000000][font=Verdana, Arial, Helvetica, sans-serif]

//Entity.cpp [/font]

[color=#000000][size=2]Code:
#include "Entity.h"

void Entity::Load(std::string filename, float x, float y)
{
this -> Filename = filename;

this -> Image.LoadFromFile(this -> Filename.c_str());
this -> Sprite.SetImage(this -> Image);

this -> posx = x;
this -> posy = y;
}

void Entity::Update()
{
this -> Sprite.SetPosition(this -> posx, this -> posy);
}
[color=#000000][font=Verdana, Arial, Helvetica, sans-serif]

[/font]

sarim
sarim
by the way...sorry about the code. I dont know why it didnt come out in proper form I didn't mean to do that
ProvenDantheman
ProvenDantheman
Are you allocating and deleting memory appropriately? using something that isn't there can do that. what type of exception are you given?
sarim
sarim
it has something to do with engine -> window -> Draw(entity.GetSprite());

it says that the value there is something like 0x00000 even tho right before that line the pointer has a value
sarim
sarim
i just ran it again and for some reason "engine" just stops pointing to something altogether. it reads 0x000000etc
ProvenDantheman
ProvenDantheman
I can guarantee it has something to do with allocated memory. Really look at your code and make sure you're handling memory properly.
sarim
sarim
i am right now but i haven't been programming for a while and i just got back into it seriously a few days ago. I still remember alot its just that im a bit rusty so it's hard for me to weed out little mistakes like that
sarim
sarim
Ok so i figured something out...right before "manager.Update()" is called in Run(), "engine" is fine. But inside the "manager.Update()" method it loses its values it's pointing to for some reason. Any idea as to why this is?
ProvenDantheman
ProvenDantheman
You can never really master programming in my opinion, because there's always something to learn haha. We all make mistakes. In fact, I'm working on a game, and it seems like for any one thing I implement, there's an error that takes me forever to solve. Then again, I'm self taught, and I tackled big project too early.
ProvenDantheman
ProvenDantheman
Maybe it has somethign to do with your iterator code? I've never used the iterator classes. I've honestly never heard of our seen it before.
sarim
sarim
well the iterator stuff just makes a container to hold all the characters and objects within the game. Every frame it runs through all the objects and updates them. This is where "engine" keeps losing its pointer for some reason
ProvenDantheman
ProvenDantheman
Make sure you aren't exceeding the amount of allocated objects there are, and make sure the memory for the objects is allocated accordingly.
ProvenDantheman
ProvenDantheman
[color=#282828][font=helvetica, arial, verdana, tahoma, sans-serif]

entity.GetSprite().SetPosition(entity.GetX(), entity.GetY());

Is this correct? Seems odd.

[/font]

sarim
sarim
let me fix that a bit and ill see if it works
sarim
sarim
so i cleaned that part up a little bit but it still doesnt work. The error is still coming up at "engine -> window -> Draw();"
ProvenDantheman
ProvenDantheman
Well then it has to be the draw function. Take a look. Or perhaps it has to be the getsprite function
sarim
sarim
No its not that...it has to do something with the "engine" instantiation. It's perfectly fine before it enters the entity manager. Then when it's in it the value goes to 0x0000000
swiftcoder
swiftcoder
You should place a data breakpoint on the relevant pointer, so that you can see when it is modified during debugging.
Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.