Sign in to follow this  
Le Van

error Run-Time Check Failure #0

Recommended Posts

Le Van    116
Hello guys, i have problem with my code


tankGame.h

[CODE]
class myTank;
class TankSteering;
//enum KEYS{ W, S, A, D,J,K};
class TankGame{
public:
TankGame(ALLEGRO_DISPLAY* display);
~TankGame();
myTank* m_player;
TankSteering* m_TankSteering;
void Update();
void Render();
};
[/CODE]


myTank.h

[code]
class TankGame;
class TankSteering;

class myTank : public MovingEntity {
public:
myTank(TankGame* tank_game, Vector2D pos, ALLEGRO_DISPLAY* display);
~myTank();
void Update();
void Render();
....blah....
private:
....blah....
TankSteering* m_pSteering;
TankGame* m_tankGame;

};

[/code]

tankSteering.h
[code]
class myTank;
class TankGame;
class TankSteering
{
public:
TankSteering(myTank* player, TankGame* tankGame);
//TankSteering();
~TankSteering();
Vector2D Calculate();
Vector2D Player_Steering();
private:
TankGame* m_pTankGame;
float m_fMaxForce;
myTank* m_tplayer;
float m_fDesRateForce;
};
[/code]

TankGame.cpp
[code]

TankGame::TankGame(ALLEGRO_DISPLAY* display)
{
m_player = new myTank(this, Vector2D(200.0f, 200.0f), display);
//m_TankSteering = new TankSteering(this);
for(int i = 0; i < 6; i++)
{
keys[i] = false;
}
}
blah blah
[/code]

the thing is, when i remove the line "m_player = new myTank(this, Vector2D(200.0f, 200.0f), display);" in my tankGame, it work. But when i add this line in TankGame constructor, error "error Run-Time Check Failure #0" happened. when i create an object of myTank in mainfunction, it worked. Someone can help me [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img]. Thank in advance Edited by linhmai27

Share this post


Link to post
Share on other sites
Le Van    116
here is sir :)
[CODE]
#include "tankGame.h"
#include "myTank.h"
//#include "Tank_SteeringBehavior.h"
#include "Tank_Scriptor.h"
#include <allegro5\allegro.h>
#include <allegro5\allegro_primitives.h>
#include <allegro5\allegro_image.h>
myTank :: myTank(TankGame* tank_game, Vector2D pos, ALLEGRO_DISPLAY* display) : MovingEntity(pos,
script->GetFloat("Player_Scale"),
Vector2D(0,0),
script->GetFloat("Player_MaxSpeed"),
Vector2D(1,0),
script->GetFloat("Player_Mass"),
Vector2D(script->GetFloat("Player_Scale"),script->GetFloat("Player_Scale")),
script->GetFloat("Player_MaxHeadTurnRate"),
script->GetFloat("Player_MaxForce"))
{
m_tankGame = tank_game;
m_tankBody = new tankBody();
m_tankBarrel = new tankBarrel();
m_bImage = al_load_bitmap("Tankz_sprite.png"); // the entry image
int h = al_get_bitmap_height(m_bImage);
int w = al_get_bitmap_width(m_bImage);
ALLEGRO_BITMAP* tempImage;
tempImage = al_create_bitmap(w/5, h);
m_tankBody->image[0] = al_create_bitmap(w/5, h);
m_tankBody->image[1] = al_create_bitmap(w/5, h);
m_tankBarrel->image = al_create_bitmap(w/5, h);

al_set_target_bitmap(m_tankBody->image[0]);
al_draw_bitmap_region(m_bImage,0,0,40,40,0,0,1);
al_draw_tinted_bitmap_region(m_bImage, al_map_rgba_f(0.0f,1.0f,0.0f,0.5f), 80.0f, 0.0f, 40.0f, 40.0f, 0.0f, 0.0f, 1);
al_set_target_bitmap(m_tankBody->image[1]);
al_draw_bitmap_region(m_bImage,40,0,40,40,0,0,1);
al_draw_tinted_bitmap_region(m_bImage, al_map_rgba_f(0.0f,1.0f,0.0f,0.5f), 80.0f, 0.0f, 40.0f, 40.0f, 0.0f, 0.0f, 1);
al_set_target_bitmap(m_tankBarrel->image);
al_draw_bitmap_region(m_bImage,120,0,40,40,0,0,1);
al_draw_tinted_bitmap_region(m_bImage, al_map_rgba_f(0.0f,1.0f,0.8f,0.5f), 120.0f, 0.0f, 40.0f, 40.0f, 0.0f, 0.0f, 1);

al_set_target_bitmap(al_get_backbuffer(display));
//al_draw_tinted_bitmap(
//m_tankBody->position = Pos();
m_tankBody->center = Vector2D(20.0f, 20.0f);
//MovingEntity(pos, Vector2D(0,0), script->get
}
myTank :: ~myTank()
{
}

void myTank :: Update()
{
}
void myTank :: UpdateMovement()
{
// Vector2D force = m_pSteering->Calculate();
//if no steering force is produced decelerate the player by applying a
//braking force
//if (m_pSteering->Force().isZero())
//{
// const double BrakingRate = 0.8;
// m_vVelocity = m_vVelocity * BrakingRate;
//}
//calculate the acceleration
Vector2D accel = m_V2Dforce / m_dMass;
//update the velocity
m_vVelocity += accel;
//make sure vehicle does not exceed maximum velocity
m_vVelocity.Truncate(m_dMaxSpeed);
//update the position
m_vPosition += m_vVelocity;
//if the vehicle has a non zero velocity the heading and side vectors must
//be updated
if (!m_vVelocity.isZero())
{
m_vHeading = Vec2DNormalize(m_vVelocity);
m_vSide = m_vHeading.Perp();
}
}
void myTank :: Render()
{
al_draw_bitmap(m_tankBody->image[0], Pos().x, Pos().y, 0);
al_draw_bitmap(m_tankBarrel->image, Pos().x, Pos().y, 0);
}
[/CODE]

Share this post


Link to post
Share on other sites
Ashaman73    13715
I don't know allergro, but what about the 'script' var in the constructor of myTank ? It seems to be a global var, is it already initialized when accessing it in the constructor ? Edited by Ashaman73

Share this post


Link to post
Share on other sites
Le Van    116
thank for reading my topic. When i create object of myTank in main function, and render it. All things work.

but when i create object of TankGame in main function( it include instance of mytTank, it call constructor of m_player, and in debug mode, it goes to the end of TankGame constructor ( in this case, it created myTank object ),it raise "error Run-Time Check Failure #0" here

script is an singleton class, and i tested it, it worked. [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img]

[CODE]
#ifndef TANK_SCRIPTOR
#define TANK_SCRIPTOR
#pragma warning (disable:4786)
//-----------------------------------------------------------------------------
//
// Name: Raven_Scriptor
//
// Author: Mat Buckland (www.ai-junkie.com)
//
// Desc: A Singleton Scriptor class for use with the Raven project
//-----------------------------------------------------------------------------
#include <script\Scriptor.h>
#define script Tank_Scriptor::Instance()
class Tank_Scriptor : public Scriptor
{
private:

Tank_Scriptor();
//copy ctor and assignment should be private
Tank_Scriptor(const Tank_Scriptor&);
Tank_Scriptor& operator=(const Tank_Scriptor&);
public:
static Tank_Scriptor* Instance();
};

#endif
[/CODE] Edited by linhmai27

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this