0

これはエミュレータ用ですが、今はROMをロードしているところです。コードでブレーク例外エラーが発生する理由がわかりません。bufferGame 関数の後、gameBuffer 変数が範囲外になります。その関数で gameBuffer[0] などを呼び出すことができますが、配列を呼び出す別の関数を作成するとすぐに、次のようになります。助けてください!

ヘッダ:

class CGame
{
public:
CGame(char* passed_gamePath);
~CGame(void);

void loadGame(char* gamePath);
void closeGame();
BYTE* getBufferedFile();
int getGameSize(FILE* game);
void bufferGame(FILE* game);
void printHexBytes(int offset, int amount);

private:
    int gameSize;
    FILE* game;
    BYTE* gameBuffer;
};

CPP ファイル: コンストラクタ:

CGame::CGame(char* passed_gamePath)
{
game = NULL;
gameSize = 0;
gameBuffer = NULL;
loadGame(passed_gamePath);
bufferGame(game);
}

ロードゲーム:

void CGame::loadGame(char* gamePath)
{
if ((fopen_s(&game, gamePath, "rb")) == 0)
{
    std::cout << "File opened successfully!" << std::endl;

    gameSize = getGameSize(game);

}
else
{
    std::cout << "Could not open file." << std::endl;
}
}

バッファゲーム:

void CGame::bufferGame(FILE* game)
{
gameBuffer = new BYTE[gameSize];

    if (fread_s(gameBuffer, gameSize, 1, gameSize, game) != 0)
    {   
        std::cout << "Read file successfully!" << std::endl;
    }
    else 
    {
        std::cout << "Error reading file." << std::endl;
    }   
}

*編集:上記が正しいと思われるので、追加のコードを次に示します。

エミュレーターはメインでインスタンス化されます。コンストラクターは、Game のインスタンスをインスタンス化します。次に、printHexBytes が呼び出され、gameBuffer の読み取りエラーが発生します。(ちなみに、混乱を避けるために game(変数) を gameFile に名前変更しました。)

エミュレータコンストラクタ:

CEmulator::CEmulator(void)
{

CGame* Game = new CGame("SuperMarioWorld.smc");
p_Register = 0x00;

}

メインファイル:

int main (void)
{
CEmulator* Emulator = new CEmulator();


Emulator->getGame()->printHexBytes(0x0FF, 9);

std::cin.get();

delete Emulator;
return 0;
}

16 進バイトの出力 (CGame の一部):

void CGame::printHexBytes(int offset, int amount)
{
for (int i = offset; i < (offset + amount); i++)
{
    printf("%X ", gameBuffer[0]);   
}
}
4

1 に答える 1

3

あなたの問題はCEmulatorコンストラクターにあります:

CGame* Game = new CGame("SuperMarioWorld.smc");

新しい を作成し、それを というローカル変数CGameに格納し、関数が戻るときにそれを破棄しています。これを別の場所に保管するつもりだったのでしょうか。Game

于 2013-09-16T23:25:49.137 に答える