2016-05-17 32 views
-5

エラーが発生し続けます:ベクトルの添え字が範囲外です。なぜ私はそれを取得し続けているか調べるために1時間を費やした、それは明らかな何かかもしれないが、私はそれを見ることができない。試行錯誤の中で、どこに問題があるのか​​を見極めるために、私はそれを2番目の間に絞り込んだ。どんな助けも歓迎されます。ありがとう。C++:ベクトルの添え字が範囲外です

fstream text("text.txt",ios::in); 
vector <char> arr; 
vector <int> freq; 
char a; 
if(!text) 
{ 
    cout<<"\nError!\n"<<endl; 
    return; 
} 
else 
{ 
    //-------------//initializing first element of each vector 
    text>>a; 
    arr.push_back(a); 
    freq.push_back(1); 
    //-----------// 
    while(!text.eof()) 
    { 
     text>>a; 
     unsigned i=0; 
     while(a != arr[i] && i < arr.size()) 
      i++; 
     if(i < arr.size()) 
     freq[i]++; 
     else 
     { 
      arr.push_back(a); 
      freq.push_back(1); 
     } 
    }} 
+4

デバッグ!コードをステップ実行してください... –

+0

if(i NathanOliver

+0

while(a!= arr [i] && i

答えて

0

あなたはwhile文に条件を交換chouldは

while (i < arr.size() && a != arr[i]) i++; 

また、この条件はEOF状態がで声明

text>>a; 

後に発生する可能性があります

while(!text.eof()) 
{ 
    text>>a; 

間違っていますその間のブロック。

ので、あなたはそれを受けている。このコードブロックの

while (text >> a) 
0

に変更し、それを。 freq配列の大きさは最初は1であるため、その上位インデックスは0ですが、freq [1]にアクセスしようとすると、i ++となった添え字インデックスiでfreqのデータにアクセスすると、決して存在しない。

if(i < arr.size()) 
     freq[i]++; 
関連する問題