0

みなさん、こんにちは!また別の問題があります。未処理の例外が発生しています。

問題を追跡して、次のソースに戻しました。

openfile >> MapFile[loadCounterX][loadCounterY];

例外は次のとおりです。

Unhandled exception at 0x76ee15de in The Vanity Engine.exe: 0xC0000005: Access violation writing location 0x336e880c.

アクセス違反だと書いてありますが、私がアクセスしているものはここで正常に開かれました。

std::ifstream openfile(filename);

全体の機能は次のとおりです。

//Load map
void Map::Load(const char *filename)
{
    //Open the file
    std::ifstream openfile(filename);
    //Check if file is open
    if(openfile.is_open())
    {
        //Get mapSizeX and Y from the file
        openfile >> mapSizeX >> mapSizeY;
        //While not at the end of the file
        while(!openfile.eof())
        {
            //Store number at loadCounterX and loadCounterY
            openfile >> MapFile[loadCounterX][loadCounterY]; //Error here
            //Increment loadCounterX++
            loadCounterX++;
            //If loadCounterX is less than mapSizeX
            if(loadCounterX >= mapSizeX)
            {
                //Set loadCounterX to 0
                loadCounterX = 0;
                //Increment loadCounterY 
                loadCounterY++;
            }
        }
    }
}

MapFileはMap.Hにあります

#ifndef MAP_H
#define MAP_H

#include "SFML\Graphics.hpp"
#include "Global.h"
#include <iostream>
#include <fstream>

class Map
{
public:
    void Load(const char *filename);
    void Draw(sf::RenderWindow &Window);
private:
    int loadCounterX, loadCounterY;
    int mapSizeX, mapSizeY;
    int MapFile[100][100];
};

#endif
4

1 に答える 1

1

loadCounter*機能するにはローカルであるか、ロードするたびに少なくとも0に初期化されている必要があります。

初めてこれは問題なく機能する可能性がありますが、次のロードの前に変数が0にリセットされないため、未割り当て領域がアドレス指定されます。

サイドノート:

マップデータには、ある種の動的割り当て(std :: vectorなど)を使用してください。毎回100x100を使用するのは意味がありませんね。

于 2012-12-27T11:58:16.720 に答える