【问题标题】:Unhandled exception error Visual Studio 2012 and Allegro 4未处理的异常错误 Visual Studio 2012 和 Allegro 4
【发布时间】:2016-03-02 14:08:01
【问题描述】:

我在 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 &lt; mapSizeX 而不是i &lt; mapSizeX
  • 据我们所见,mapSizeXmapSizeY 从未被初始化。
  • 我不敢相信我错过了 1 而不是 i。我多年来一直在寻找这个。非常感谢。
  • @LogicStuff openfile &gt;&gt; mapSizeX &gt;&gt; mapSizeY;
  • @Simon 我错过了,因为我在构造函数中寻找初始化。如果LoadMap 未被调用,则等待崩溃...

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2015-06-22
    • 1970-01-01
    相关资源
    最近更新 更多