2017-03-21 7 views
-4

したがって、ボードゲームのファイルに読み込みを実装しようとしています。Monopolyの0x003BADF8で例外がスローされます。AI.exe:0xC0000005:アクセス違反の読み取り場所0x01142018

エラーは、最初のif文と関係がありますが、私が見る限り、「インデックス」の値は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

あなたの質問を[編集]して[mcve]を提供してください。 –

+0

デバッガを使用してください:おそらく、エラーが発生した正確な行が表示されます。 –

+0

私は、コード –

答えて

1

に入れません。たとえば、最後の要素の直後のメモリアドレスはmarray[]です。

imarray[]の上限を決して超えないようにコードを修正することをお勧めします。 marray[]に10個の要素がある場合、iは決して10以上であってはなりません。

おそらくファイルが配列を超えないように十分に短くなっているとは限りません。

+0

配列のサイズを必要以上に大きく設定しました。 100)、このエラーが発生する –

+0

配列のサイズ変更に加えて、配列の各要素に 'boardSpace'インスタンスへの有効なポインタが含まれていることを確認する必要があります。 –

関連する問題