不知道为什么会这样:在Monopoly AI.exe中0x003BADF8抛出异常:0xC0000005:访问冲突读取位置0x01142018

时间:2017-03-21 23:06:13

标签: c++

所以我试图在棋盘游戏的文件中实现阅读。

现在,我知道错误与第一个if语句有关,但据我所知,“index”值应为2,因此完全跳过if语句。

下一个索引值是1,它应该会触及if语句,但是它会在检查索引值时出现错误和中断,有什么想法吗?

class boardSpace
{
public:
    int index, cost, rent, color;
    string street, streetType, jail;
};


void readFile(boardSpace marray[])
{
    int i = 0;
    ifstream inFile;
    inFile.open("Monopoly.txt");
    while (!inFile.eof())
    {
            inFile >> marray[i].index;
            inFile >> marray[i].street;

            if (marray[i].index == 1)
            {               
                inFile >> marray[i].streetType;
                inFile >> marray[i].cost;
                inFile >> marray[i].rent;
                inFile >> marray[i].color;
            }

            if (marray[i].index == 3)
            {
                inFile >> marray[i].streetType;
            }

            if (marray[i].index == 7)
            {
                inFile >> marray[i].street;
                inFile >> marray[i].streetType;
                inFile >> marray[i].jail;
            }

            if (marray[i].index == 8)
            {
                inFile >> marray[i].street;
            }   

            i++;

            if (inFile.eof())
            {
                break;
            }
    }
        inFile.close();
}

但不断收到以下错误

    Exception thrown at 0x003BADF8 in Monopoly AI.exe: 0xC0000005:
 Access violation reading location 0x01142018.

1 个答案:

答案 0 :(得分:1)

访问冲突表明您的代码正在尝试访问尚未分配的内存。例如,内存地址刚好超出marray[]中的最后一个元素。

建议您修改代码以确保i永远不会超过marray[]的上限。如果marray[]有十个元素,i必须永远不会是10个或更多。

你可能不应该依赖文件足够短以至于它永远不会超过数组。