未处理的异常错误Visual Studio 2012和Allegro 4

时间:2016-03-02 14:08:02

标签: c++ visual-studio-2012 allegro

我在Visual Studio 2012上使用allegro 4.4.2进行学校项目。 Allegro已安装并正常工作,我正试图让它加载一个位于项目文件夹中的map.txt文件。在调试时,allegro冻结并变得异常缓慢并抛出未处理的异常,违反访问代码。

这是Map.h:

#include <allegro.h>
#include "Global.h"
#include <fstream>
using namespace std;

class Map
{
    public:
         Map();
        ~Map();


        void Init();
        void Update();
        void Draw(BITMAP *Buffer);

        void LoadMap (const char*filename);
    private:
        int loadCounterX;
        int loadCounterY;
        int mapSizeX; 
        int mapSizeY;
        int MapFile[20][15];
};

这是Map.cpp:

#include "Map.h"

Map::Map()
{
}


Map::~Map()
{
}

void Map::Init()
{
    loadCounterX = loadCounterY = 0;
    Map::LoadMap("map1.txt");
}

void Map::Update()
{

}

void Map::Draw(BITMAP *Buffer)
{
    for (int i = 0; 1 < mapSizeX; i++)
    {
        for (int j = 0; j < mapSizeY; j++)
        {
            if (MapFile[i][j] == 1)
            {
                rectfill(Buffer, i*BlockSize, j*BlockSize, i*BlockSize + BlockSize, j*BlockSize + BlockSize, makecol(0, 255, 255));
            }
            else if (MapFile[i][j] == 2)
            {
                rectfill(Buffer, i*BlockSize, j*BlockSize, i*BlockSize + BlockSize, j*BlockSize + BlockSize, makecol(0, 255, 0));
            }
        }
    }
}

void Map::LoadMap(const char*filename)
{
    ifstream openfile (filename);
    if (openfile.is_open())
    {
        openfile >> mapSizeX >> mapSizeY;
        while (!openfile.eof())
        {
            openfile >> MapFile[loadCounterX][loadCounterY];
            loadCounterX ++;

            if (loadCounterX >= mapSizeX)
            {
                loadCounterX = 0;
                loadCounterY ++;
            }
        }
        loadCounterX = loadCounterY = 0;
    } //File is opened
    else
    {
        allegro_message ("Map File couldn't be found");
    }
}

这是我的主要文件:

#include <allegro.h>
#include "Player.h"
#include "Global.h"
#include "Camera.h"
#include "Map.h"
using namespace std; 
volatile int counter = 0;

void Increment ()
{
    counter ++;
}

int main (void)
{
    allegro_init();
    install_keyboard();
    install_mouse();
    install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, "A");
    set_color_depth(32);
    set_gfx_mode (GFX_AUTODETECT_WINDOWED, ScreenWidth, ScreenHeight, 0, 0);

    LOCK_VARIABLE (counter);
    LOCK_FUNCTION (Increment);
    install_int_ex (Increment, BPS_TO_TIMER(100));

    BITMAP *Buffer = create_bitmap (6000, ScreenHeight);
    bool done = false;

    Player player;
    Camera camera;
    Map map;

    player.Init();
    camera.Init();
    map.Init();

    while (!done)
    {
        while (counter > 0)
        {
            //Input
            if (key[KEY_ESC])
                done = true;

            //Update
            map.Update();
            player.Update();
            camera.Update(player.x, player.y);
            counter --;
        }

        //Draw
        map.Draw(Buffer);
        player.Draw(Buffer);
        camera.Draw(Buffer);
        clear_bitmap(Buffer);
    }
    return 0;
}
END_OF_MAIN();

它在此行崩溃

if (MapFile[i][j] == 1)

每次。 Visual Studio中“Autos”中显示的所有变量都变为红色; “MapFile”“MapFile [i]”(我不明白......这不应该只是“我”吗?)“j”“mapSizeY”和“this”但是当我扩展“MapFile”时,第一个正确填写了20个块,因为它们位于我的map.txt文件中。 我完全迷失了,不知道该怎么做......非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

void Map::Draw(BITMAP *Buffer)中,您使用1 < mapSizeX代替i < mapSizeX

您可能还希望阻止在之前未调用Map::Draw时调用Map::LoadMap