c++ - 为什么我的数组超出范围?

标签 c++ arrays visual-studio-2010 scope

这是一个模拟器,但现在我只是加载 ROM。我不明白为什么我的代码给我一个中断异常错误。 gameBuffer 变量在 bufferGame 函数之后超出范围。我可以在该函数中调用 gameBuffer[0] 等,但是一旦我创建另一个函数来调用数组,它就会给我:SNES Emulator.exe 中 0x0093303A 处未处理的异常:0xC0000005:访问冲突读取位置 0x00000008。请帮忙!

标题:

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;
    }   
}

*编辑:这是附加代码,因为你们认为以上是正确的。

模拟器在main中被实例化。构造函数实例化 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;
}

打印十六进制字节(CGame 的一部分):

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

最佳答案

您的问题出在 CEmulator 构造函数中:

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

您正在创建一个新的CGame,将其存储在名为Game本地 变量中,然后在函数返回时将其丢弃。也许您打算将其存储在其他地方?

关于c++ - 为什么我的数组超出范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18838728/

相关文章:

c++ - 在 MSVC2010 Express 和 Qt 4.8 (Qt Creator 2.4.1) 中调试资源文件编译 (rc.exe)

javascript - 为 .NET 类生成 Javascript 智能感知文件

c++ - std::ostream_iterator 未找到运算符<<

c - 检索数组的元素

c++ - std::vector在push_back和insert(end(),x)之间不一致崩溃

java - 判断一个数组是否有指定的对象

java - 如何将字符串与 HashMap 中的键进行比较

c++ - FLTK桌面截图问题

c# - 将 C# 代码转换为 C++ : Hex to Binary

c++ - 在抽象基类上使用 __declspec(novtable) 是否会以任何方式影响 RTTI?