これはエミュレータ用ですが、今は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]);
}
}