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

Unhandled exception error Visual Studio 2012 and Allegro 4

我在 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]" (我不明白..这不应该只是 "i" 吗?) "j" "mapSizeY" 和 "this" 但是当我展开 "MapFile",前 20 个块已正确填写,因为它们在我的 map.txt 文件中。 我完全迷路了,不知道该怎么做...非常感谢任何帮助!

void Map::Draw(BITMAP *Buffer) 中,您使用 1 < mapSizeX 而不是 i < mapSizeX

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